在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近因为工作需要开始学习linq了,之前接触过一些c#,但基础并不牢靠。现在再根据需要学习。这里仅作为学习过程的记录,错误之处还请评论指正。 1、查询操作三部曲 (1)、获取数据源 var db = new Northwnd(@"c:\northwnd.mdf");
(2)、创建查询 //查询在伦敦的客户 var custQuery = from cust in db.Customers where cust.City == "London" select cust;
(3)、执行查询 延迟执行 foreach (var cust in custQuery ) { Console.WriteLine("{0}", cust); Console.ReadLine(); }
强制立即执行任意查询并缓存其结果,可以调用 ToList<TSource> 或 ToArray<TSource> 方法。
//获取数据源 var nums = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; //创建查询并执行 var numQuery = (from num in nums where (num % 2) == 0 select num).ToList(); 2、详解 获取数据源 from 在 LINQ 查询中,第一步是指定数据源。像在大多数编程语言中一样,必须先声明变量,才能使用它。在 LINQ 查询中,最先使用 from 子句的目的是引入数据源和范围变量。 //queryAllCustomers 是 IEnumerable<Cutsomer> 类型 //数据源 (customers) 和范围变量 (cust) Var queryAllCustomers = from cust in customers select cust; 筛选:where 最常用的查询操作是应用布尔表达式形式的筛选器,使用 where 子句生成结果 使用熟悉的 C# 逻辑 AND(&&)和 OR(||) 运算符来根据需要在 where 子句中应用任意数量的筛选表达式。 where cust.City = "London" && cust.Name = "Devon" where cust.City="London" ||cust.Name = "Devon" 排序:orderby 默认比较器将按字母顺序从 A 到 Z 进行排序 var queryLondonCustomers = from cust in customers where cust.City = "London" orderby cust.Name descending select cust;
联接:join 联接运算创建数据源中没有显式建模的序列之间的关联。例如,您可以执行联接来查找位于同一地点的所有客户和经销商。在 LINQ 中,join 子句始终针对对象集合而非直接针对数据库表运行。 var innerJoinQuery = from cust in customers join dist in distributors on cust.City equals dist.City select new { CustomerName = cust.Name, DistributorName = dist.Name };
选择各个源元素的子集 若要只选择源元素的一个成员,请使用点运算。 var query = from cust in Customers select cust.City; 若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。 var query = from cust in Customer select new { Name = cust.Name, City = cust.City };
Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。 所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。 例:delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 }
备注: ● First:返回序列中的第一条记录,如果没有记录,则引发异常。
● FirstOrDefault:返回序列中的第一条记录,如果没有记录,则返回默认值。
● Single:返回序列中的唯一记录,如果没有或返回多条记录,则引发异常。
● SingleOrDefault:返回序列中的唯一记录;如果该序列为空,则返回默认值;如果该序列包含多个元素,则引发异常。
分组 group 子句用于对根据您指定的键所获得的结果进行分组。 例如,可指定按 City 对结果进行分组,使来自 London 或 Paris 的所有客户位于单独的组内。 在这种情况下,cust.City 是键。 var queryCustomersByCity = from cust in customers group cust by cust.City;
foreach (var customerGroup in queryCustomersByCity) { Console.WriteLine(customerGroup.Key); foreach (Customer customer in customerGroup) { Console.WriteLine(" {0}", customer.Name); } } |
请发表评论