• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c#linq学习

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近因为工作需要开始学习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);

      }

  }


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net(c#)GridView实现鼠标悬停高亮显示发布时间:2022-07-18
下一篇:
C#基于任务的异步模式发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap