2018-07-26|2018-07-26 【c#】Linq语句

会用两种写法了,第一种,firstordefault里面,直接写想要的
第二种,where里面,需要return true/false


例: 2018-07-26|2018-07-26 【c#】Linq语句
文章图片
image.png
概念如下
凡是实现了IEnumerable接口的都可以用Linq语句进行查询
Linq: Language Intergrated Query 语言集成查询
在这之前,都是一个查询字符串,传递给动态库进行解析查询
IEnumerable
LINQ to SQL / XML / DataSet / Objects
Where方法
public static IEnumerable Where(this IEnumerable source, Func predicate);
1.where函数后面声明了将要使用的泛型,返回值是该泛型的集合的迭代器;
2.xxx.Where 自动传入this迭代器参数,扩展方法
3.Func predicate 是内部嵌套使用的泛型代理方法,作为参数传递
3.1.public delegate TResult Func(T arg);
3.2.该方法在此处,需要传入一个 Where中 TSource类型,返回bool型
其他方法
其他方法与Where方法大同小异,都在System.Linq命名空间下的Enumerable类中。
1.最简单的数组进行Linq查询

2018-07-26|2018-07-26 【c#】Linq语句
文章图片
两次输出结果一样.png
using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace LinqTest { class Program { static void Main(string[] args) { //Linq: Language Intergrated Query 语言集成查询 //在这之前,都是一个查询字符串,传递给动态库进行解析查询 //IEnumerable //LINQ to SQL/XML/DataSet/Objectsint[] numbers = { 5, 10, 8, 3, 6, 12 }; //1.Query syntax var numQuery1 = from num in numbers where num % 2 == 0 orderby num select num; foreach(var x in numQuery1) { Console.WriteLine(x); } Console.ReadLine(); //2.Method syntax var numQuery2 = numbers.Where((x) => { return (x % 2) == 0; }).OrderBy(x => x); foreach (var x in numQuery1) { Console.WriteLine(x); } Console.ReadLine(); } } }

【2018-07-26|2018-07-26 【c#】Linq语句】2.以下四个方法,达到效果相同。虽然,到现在还是没弄懂selectwhere这个复杂的泛型的结构,但是能用了;效果是,把两个list投影到一个list进行查找(据说Linq的效率还很高)。那么以后查找不遍历了,使用linq。
public class Item { public int ID; public string name; } List> AllList = new List>(); public Item GetItem0(int id) { foreach (var x in AllList) { foreach (var y in x) { if (y.ID == id) return y; } } return null; }public Item GetItemByID0(int id) => AllList.SelectMany(c => c).FirstOrDefault(c => c.ID == id); public Item GetItemByID1(int id) { return AllList.SelectMany(c => c).FirstOrDefault(c => c.ID == id); }public Item GetItemByID2(int id) { return AllList.SelectMany(c => c).Where(c => c.ID == id).First(); }

    推荐阅读