C# Linq to Sql

LINQ查询运算符可以处理内存中可查询的.NET类型实例。可查询的.NET类型是指那些实现IEnumerable接口或继承于IQueryable<T>泛型接口的类型。数组List、Dictionary及.NET Framework中的其他集合类型都是可查询的。

  XML和DataSet不能直接查询,因为二者都没实现IEnumerable接口。为此,在使用前,我们需要对它们进行特殊处理,该过程会调用DataSet上的AsEnumerable方法和XML文档的XDocument.Load方法时执行。

  LINQ与SqlCommand对象不同的是,在开始对数据进行操作时,查询才会隐式地执行。换言之,不必显式地执行命令,它会被延迟,直到遇到用于获取查询结果的代码。这种特性被称为查询的延迟执行。

  如果合作ToList或ToArray方法将数据加载到.NET对象中,查询便会立即执行,不会被延迟:

var data = (from c in dataContext.Customers where c.Country = "Spain" select c).ToList();

 最后注意,只有生成集合的查询会被延迟,若查询只获取某个标量,它会被立即执行。



1、Concat(连接不同的集合不会自动过滤相同项。会延迟计算)

var q = (from c in db.Customers
        select c.Phone
            ).Concat(
            from e in db.Employees
            select e.HomePhone);
   var q = (from c in db.Customers
            select new
            {
               Name = c.CustomerName,
               Phone = c.Phone
             }).Concat(
            from e in db.Employees
            select new
            {
               Name = e.EmployeeName,
               Phone = e.HomePhone
             });

2、Union(合并,自动过滤相同的项。会延迟计算)

var q = (from c in db.Customers
            select c.Country).Union(
            from e in db.Employees
            select e.Country);

3、Intersect(交。会延迟计算)

var q = (from c in db.Customers
            select c.Country).Intersect(
            from e in db.Employees
            select e.Country);

4、Except(差,A-B。从A集合排除A交B。会延迟计算)

var q = (from c in db.Customers
            select c.Country).Except(
            from e in db.Employees
            select e.Country);

5、Top、Bottom(取出指定数量的数据。会延迟计算)

6、Take(获取集合的前n个数据。会延迟计算)

var q = (from e in db.Employees
            orderby e.HireDate
            selct e).Take(5);

7、Skip(跳过集合的前n个数据。会延迟计算)

var q = (from p in db.Products
            orderby p.UnitPrice descending
            select p).Skip(10);

8、TakeWhile(直到某一条件不成立才停止获取。会延迟计算)
   即用其条件去依次判断源序列中的元素,返回符合判断条件的元素,该判断操作将在返回false或源序列的末尾结束

9、SkipWhile(顾名思义,同上)
10、Paging(分页操作)

var q = (from c in db.Customers
             orderby c.CustomerName
             select c).Skip(50).Take(10);

11、Like

var q = from c in db.Customers
        where SqlMethods.Like(c.CustomerID, "C%")
        select c;

查询消费者ID没有“AXOXT”形式的消费者:

var q = from c in db.Customers
        where !SqlMethods.Like(c.CustomerID, "A_O_T")
        select c;DateDiffDay

在两个时间变量之间比较。分别有:DateDiffDay、DateDiffHour、DateDiffMillisecond、DateDiffMinute、DateDiffMonth、DateDiffSecond、DateDiffYear:

var q = from o in db.Orders
        where SqlMethod.DateDiffDay(o.OrderDate, o.ShippedDate) < 10
        select o;

 查询在创建订单后10天内发货的所有订单

12、Compiled Query(预编译查询)

NorthwindDataContext db = new NorthwindDataContext();
    var fn = CompiledQuery.Compile(
               (NorthwindDataContext db2, string city) =>
              from c in db2.Customers
              where c.City == city
              select c);
    var londonCusts = fn(db, "London");
    var seaCusts = fn(db, "Seattle");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值