• 常用LINQ的查询


    T:sql:

    select * from DB_FacultyReserveDetails details join DB_FacultyreserveRule rul on details.[FK_ FacultyReserveRule] =rul.Id where details.FK_BedInfo not in (select FK_BedInfo from SD_StuLiveInfo) Linq语句: var query = (from res in db.DB_FacultyReserveDetails join faculty in db.DB_FacultyreserveRule on res.FK__FacultyReserveRule equals faculty.Id into facu from selfiquery in facu.DefaultIfEmpty() where !(from ii in db.SD_StuLiveInfo select ii.FK_BedInfo).Contains(res.FK_BedInfo) && selfiquery.BeginDate <= System.DateTime.Now && selfiquery.EndDate >= System.DateTime.Now join view in db.View_FullDept on res.Fk_DeptClass ?? res.Fk_DeptInfoMajor ?? res.Fk_DeptInfoFaculty equals view.ID group view by new { code = view.ID, name = view.fullName } into g select new { Code = g.Key.code, Name = g.Key.name, Value = "0" }).ToList();

    1.Union 合并

    说明:连接不同的集合,自动过滤相同项;延迟。即是将两个集合进行合并操作,过滤相同的项。

    例如:

    var q = (
    
    from c in db.DB_studentInfo
    
    select c.Id
    
    ).Union(
    
    from e in db.SD_StuLiveInfo
    
    select e.FK_studen
    
    );

    2.Concat 连接

    说明:连接不同的集合,不会自动过滤相同项;延迟

    (1) 简单

    var q = (
    
    from c in db.Customers
    
    select c.Phone
    
    ).Concat(
    
    from c in db.Customers
    
    select c.Fax
    
    ).Concat(
    
    from e in db.Employees
    
    select e.HomePhone
    
    );

    语句描述:返回所有消费者和雇员的电话和传真。

    (2)复合形式 

    var q = (
    
    from c in db.Customers
    
    select new
    
    {
    
    Name = c.CompanyName,
    
    c.Phone
    
    }
    
    ).Concat(
    
    from e in db.Employees
    
    select new
    
    {
    
    Name = e.FirstName + " " + e.LastName,
    
    Phone = e.HomePhone
    
    }
    
    );

    语句描述:返回所有消费者和雇员的姓名和电话。

    3.Intersect 相交

    说明:取相交项;延迟。即是获取不同集合的相同项(交集)。即先遍历第一个集合,找出所有唯一的元素,然后遍历第二个集合,并将每个元素与前面找出的元素作对比,返回所有在两个集合内都出现的元素。

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

    4.Except(与非)

    说明:排除相交项;延迟。即是从某集合中删除与另一个集合中相同的项。先遍历第一个集合,找出所有唯一的元素,然后再遍历第二个集合,返回第二个集合中所有未出现在前面所得元素集合中的元素。

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

    5.Take

    说明:获取集合的前n个元素;延迟。即只返回限定数量的结果集。

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

    6.Skip

    说明:获取集合的前n个元素;延迟。即只返回限定数量的结果集。

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

    7.Top/Bottom 操作

    适用场景:适量的取出自己想要的数据,不是全部取出,这样性能有所加强。

    8.TakeWhile

    说明:直到某一条件成立就停止获取;延迟。即用其条件去依次判断源序列中的元素,返回符合判断条件的元素,该判断操作将在返回false或源序列的末尾结

    9.paging(分页)操作

    (1)索引

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

      

    语句描述:使用Skip和Take运算符进行分页,跳过前50条记录,然后返回接下来10条记录,因此提供显示Products表第6页的数据

    (2)按唯一排序

    var q = (
    from p in db.Products
    where p.ProductID > 50
    orderby p.ProductID
    select p)
    .Take(10);


    语句描述:使用Where子句和Take运算符进行分页,首先筛选得到仅50 (第5页最后一个ProductID)以上的ProductID,然后按ProductID排序,最后取前10个结果,因此提供Products表第6页的数据。请注意,此方法仅适用于按唯一键排序的情况。

    10.sqlMenthods 操作

    在LINQ to SQL语句中,为我们提供了SqlMethods操作,进一步为我们提供了方便,例如Like方法用于自定义通配表达式,Equals用于相比较是否相等。

    11.Like

    自定义的通配表达式。%表示零长度或任意长度的字符串;_表示一个字符;[]表示在某范围区间的一个字符;[^]表示不在某范围区间的一个字符。比如查询消费者ID以“C”开头的消费者。

    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;

    12.DateDiffDay

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

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

    13.已编译查询操作 (Compiled Query)

    说明:在之前我们没有好的方法对写出的SQL语句进行编辑重新查询,现在我们可以这样做,看下面一个例子:

    1.创建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);

    2.查询城市为London的消费者,用LonCusts集合表示,这时可以用数据控件绑定

    var LonCusts = fn(db, "London");

    3.查询城市为Seattle的消费者

    var SeaCusts = fn(db, "Seattle");  

    14.分组

    常用的分组用法:

    var linqtest = from r in db.Am_recProScheme
    
    orderby r.rpId descending
    
    group r by r.recType into n
    
    select new
    
    {
    
    n.Key, //这个Key是recType
    
    rpId = n.Sum(r => r.rpId), //组内rpId之和
    
    MaxRpId = n.Max(r => r.rpId),//组内最大rpId
    
    MinRpId = n.Min(r => r.rpId), //组内最小rpId
    
    };

    略微复杂点:

    var dataList= (from r in drugLabelList
    
    group r by new
    
    {
    
    r.OrderNo,
    
    r.PatientID,
    
    r.PatientName
    
    } into q
    
    let drugAmount = q.Sum(t => Convert.ToInt32(t.ChargeAmount))
    
    where drugAmount >= 0
    
    select new PrintDrugLabelModel
    
    {
    
    OrderNo = q.Key.OrderNo,
    
    PatientID = q.Key.PatientID,
    
    PatientName = q.Key.PatientName,
    
    ChargeAmount = ""+drugAmount
    
    }).ToList<PrintDrugLabelModel>();

    15. 排序order by desc/asc

    var linqtest = (from r in db.Am_recProScheme
    
    where r.rpId > 10
    
    orderby r.rpId descending //倒序
    
    // orderby r.rpId ascending //正序
    
    select r);
    

      

  • 相关阅读:
    DataList分页的实现
    request
    MDX as的使用
    GridView加入checkbox
    .net读取excel
    Cousin
    silverlight柱状图 改变选项事件 和 取消选择
    关于DrillThrough
    取最大值的那天MDX
    ConnectionString has already been added(虚拟目录的web.config节点不继承上级目录)
  • 原文地址:https://www.cnblogs.com/BabyRui/p/10056840.html
Copyright © 2020-2023  润新知