美文网首页
C# linq查询表达式:

C# linq查询表达式:

作者: 易点梅 | 来源:发表于2020-04-06 14:20 被阅读0次

    约束:LINQ查询表达式必须以from子句开头,以select或group子句结束

    from [d] in IEnumerale where [d].[propertity] = xxx select [d]

    from...in...:指定要查找的数据以及范围变量,多个from子句则表示从多个数据源查找数据

    join...in...on...equals...:指定多个数据源的关联方式

    where:指定元素的筛选条件,多个where子句则表示了并列条件,必须全部都满足才能入选,每个where子句可以使用&&、||连接多个条件表达式

    group:指定元素的分组字段

    select:指定查询要返回的目标数据,可以指定任何类型,甚至是匿名类型(目前通常被指定为匿名类型)

    orderby、descending:指定元素的排序字段和排序方式,当有多个排序字段时,由字段顺序确定主次关系,可指定升序和降序两种排序方式

    into:提供一个临时的标识符,该标识符可以引用join、group和select子句的结果。
    (1)直接出现在join子句之后的into关键字会被翻译为GroupJoin。
    (2)select或group子句字后的into它会重新开始一个查询,让我们可以继续引入where、orderby和select子句,它是对分步构建查询表达式的一种简写方式。

    let:引入用于存储查询表达式中子表达式结果的范围变量,通常能达到层次感会更好,使代码更易于月的

    例子:masterList和x都是对象列表list<Object>

    var res = from m in masterList where m.menpai = '武当派' && m.level >= 9
    等价
    var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮");
    等价
    static bool Test1(MartialArtsMaster master)
    {
    if (master.Level > 8) return true;
    return false;
    }
    var res = masterList.Where(Test1);

    联合查询:

    var res = from m in masterList
    from k in kongfuList
    where m.Kongfu == k.Name && k.Power > 90
    select m;
    等价
    var res = masterList.SelectMany(m => kongfuList, (m, k) => new { master = m, kongfu = k }).Where(x => x.master.Kongfu == x.kongfu.Name && x.kongfu.Power > 90);

    对查询结果做排序 orderby (descending)

    var res = from m in masterList
    where m.Level > 8 && m.Menpai == "丐帮"
    //orderby m.Age descending // 默认从小到大,加上descending从大到小
    orderby m.Level, m.Age //按照多个字段进行排序,如果字段的属性相同,就按照第二个属性排序
    select m;//表示m的结果结合返回

    var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m => m.Age);

    如果排序判断条件有多个,后面的排序要用ThenBy

    var res = masterList.Where(m => m.Level > 8).OrderBy(m => m.Level).ThenBy(m => m.Age);

    Join on集合联合查询

    var res = from m in masterList
          // join...in... 表示要连接的表,on后面为连接条件,等于要用equals,不能用==
          join k in kongfuList on m.Kongfu equals k.Name
          where k.Power > 90
          select new { master = m, kongfu = k };
    

    分组查询 into groups

    把武林高手按照所学功夫分类,看一下那个功夫修炼的人数最多

    var res = from k in kongfuList
          join m in masterList on k.Name equals m.Kongfu
          into groups   //分组
          orderby groups.Count()  // 这个可以获得数量
          select new { kongfu = k, count = groups.Count() };
    

    按照自身字段分组 group by

    var res = from m in masterList
          group m by m.Kongfu
          into g
          select new { count = g.Count(), key = g.Key };//g.Key Key表示是按照那个属性分的组

    相关文章

      网友评论

          本文标题:C# linq查询表达式:

          本文链接:https://www.haomeiwen.com/subject/ipqbphtx.html