LINQ查询技术入门
LINQ简介
LINQ能够解决什么问题
在NET平台开发中,面向对象编程语言与数据访问方法长期分离,数据访问通过SQL进行查询,这种嵌入SQL语句的方式极容易出现错误。
SQL和XML都有各自的查询语言,而对象没有自己的查询语言。
再比如,要从List<T>
集合或数组中找到符合要求的元素,非常困难。
什么是LINQ
LINQ(Language Integrated Query,语言集成查询)
LINQ主要包含以下三个部分:
- LINQ to Objects主要负责对象的查询;
- LINQ to XML主要负责XML的查询;
- LINQ to ADO.NET主要负责数据库的查询;
- (1)LINQ to SQL;
- (2)LINQ to DataSet;
- (3)LINQ to Entities;
LINQ所在命名空间
- SyStem.Linq;该命名空间由系统自动引入。
使用和不使用LINQ查询的对比
-
不使用LINQ
#region 示例1:不使用LINQ查询 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; List<int> list = new List<int>(); foreach (int item in nums) { if (item %2 !=0) { list.Add(item); } } list.Sort(); list.Reverse(); foreach (int item in list) { Console.WriteLine(item); } Console.ReadLine(); #endregion
-
使用LINQ查询
#region 示例2:使用LINQ技术查询数组 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = from num in nums where num % 2 != 0 orderby num descending select num; foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
LINQ查询简单、直观、明了。
LINQ查询方法
-
获取数据:扩展方法
Select()
Select()
是一个泛型扩展方法,Select
方法里面是一个Lambda
表达式,返回结果是一个迭代器(Iterator
)Select()
方法使用的时候,要求传递一个委托实例(委托实例就是一个方法)
Select()
方法应用#region 示例3:Select()方法应用 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = nums.Select(item => item * item); foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
-
筛选数据:
Where()
方法Where()
方法是一个泛型扩展方法Where()
方法使用的时候要求传递一个委托实列,但该实例是一个判断条件,因此返回的类型必需是bool
类型
Where()
方法应用#region 示例4:Where()方法应用 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = nums.Where(item => item % 2 == 0).Select(i => i * i); foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
-
排序数据:OrderBy()方法
- OrderBy()是一个扩展方法
- OrderBy()里面的参数要求传递一个排序的字段,默认按照升序排列
- 如果想降序排列可以使用OrderByDescending方法
OrderBy()方法应用
#region 示例5:OrderBy()方法应用 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = nums .Where(item => item % 2 == 0) .Select(i => i * i) .OrderByDescending(item => item); foreach (var item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
字符串数组排序:
#region 示例6:字符串排序 string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" }; var list = nums .Where(item => item.Length == 2) .Select(item => item) .OrderBy(item => item.Substring(0, 1)); foreach (var item in list) { Console.WriteLine(item); } Console.ReadLine(); #endregion
-
分组数据:GroupBy()方法
- OrderBy()是一个扩展方法
- OrderBy()里面的参数要求从传递一个分组的字段
GroupBy()方法应用
#region 示例7: GroupBy()方法应用 string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" }; var list = nums .Where(item => item.Length == 2) .Select(item => item) .GroupBy(item => item.Substring(0, 1)); foreach (var groupitem in list) { Console.WriteLine("---------------"); Console.WriteLine("分组字段:{0}", groupitem.Key); foreach (var item in groupitem) // 内层循环遍历分组项 { Console.WriteLine(item); } } Console.ReadLine(); # endregion
-
推荐这些技术文章:
class Test
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Test> list = new List<Test>();
list.Add(new Test { Na...
EF 报LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”,在线求助!!!
问题
以下是我的代码片段:
Expression<Func<T_ZhaoBiaoInfo,bool>> whereExpr = PredicateExtensions.True<T_ZhaoBiaoInfo>();
if (!string.IsNullOrEmpty(category))
...
问题
DbNorthwind northwind = new DbNorthwind();Console.WriteLine("查询订单数超过5的顾客信息:");var result = from c in northwind.Customers where ( from o in northwind.Orders grou...
急急急!dictionary中如何通过value 来获取相应的key
问题
c#编程dictionary中如何通过value 来获取相应的key
最佳回答
Demo:
var dic = new Dictionary<string, int>()
{
{"a",1},
{"b",2},
{"c",3},
{"d",1}
};
foreach (var item ...
var list = new List<string> { "1","2","3","4","5","3" }; var datas = list.GroupBy(g => g).Where(w => w.Count() > 1).Select(s => s.K...
问题
模糊匹配一组关键字 keywords[]
var list = from item in db...........
foreach(var k in keywords)list = from item in list where item.Name.Contains(k) select item;
这样生成sql之后,永远只有最后一个关键字传进去,而且这...
echarts图中动态加载、悬浮框(tooltip)中嵌套echarts
tooltip: {
position: (point, params, dom, rect, size) => {
var arr = Array.from(document.querySelectorAll(".c1"));
var charArr = arr.map(item => echarts.init(item));
var option1 =...
一.查询语法
编写大多数查询的推荐方式是使用查询语法创建查询表达式。
// Query #1. List<int> numbers = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
// The query variable can also be implicitly typed by using ...
问题
var items中的items是个排序后的集合,现在要取出其中第5到10之间的元素,请问用linq怎么写?
最佳回答
var list=(from item in items select item).Skip(5).Take(5)
...
var arr = ['a','ab','abc','ab','ab','a','c','f','c']var b = []var a = arr.reduce((obj,item)=>{ if(obj[item]){ obj[item] += 1 }else{ obj[item] = 1 } retu...
文章链接:https://www.dianjilingqu.com/3867.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。