【问题标题】:Linq distinct & maxLinq distinct 和 max
【发布时间】:2013-04-18 07:19:53
【问题描述】:

我要查询这张表:

symbol    time
------    ----------
aaa       2013-04-18 09:10:28.000    
bbb       2013-04-18 09:10:27.000    
aaa       2013-04-18 09:10:27.000    
bbb       2013-04-18 09:10:26.000

对于所有具有最大时间值的不同符号,我需要一行。如何编写我的 linq 查询?

提前致谢,

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

    symbol 对行进行分组,然后从具有最大 时间 的每个组项中进行选择(Table 是上下文中您的数据库表名称):

    from r in Table
    group r by r.symbol into g
    select g.OrderByDescending(x => x.time).First()
    

    与方法语法相同:

    Table.GroupBy(r => r.symbol)
         .Select(g => g.OrderByDescending(x => x.time).First());
    

    【讨论】:

    • 如果你使用GroupBy,保证至少有一行,所以你可以使用First而不是FirstOrDefault
    • @TimSchmelter 同意,但我不确定它是否是 EF(经常抱怨 First()),所以我决定在这里离开 FirstOrDefault() :) 但是,好吧,它是 Linq to SQL,我会更新
    • 即使 Linq-To-Entities 也应该支持Firstmsdn.microsoft.com/en-us/library/bb738550.aspx(不支持Last/LastOrDefault
    • @TimSchmelter 好吧,可能是 old fear 现在已修复。很高兴知道:)
    【解决方案2】:

    试试这个

    var q = MyTable.GroupBy(x => x.symbol )
                   .Select(g => g.OrderByDescending(i => i.time).First());
    

    或者像这样使用 max

     var data = from r in MyTable
                       group r by r.symbol into g
                       select new { name= g.Key, data= g.Max(a=>a.time) };
    

    【讨论】:

      【解决方案3】:

      我会实际使用。

      void Main()
      {
          var set = new [] {
              new Foo{A = "aaa", B = 1},
              new Foo{A = "bbb", B = 2},
              new Foo{A = "aaa", B = 3},
              new Foo{A = "bbb", B = 4},
          };
      
          var result = from x in set
                      group x.B by x.A into g
                      select new {id = g.Key, biggest = g.Max()};
      
          Console.WriteLine(result);
      }
      

      【讨论】:

        【解决方案4】:

        你可以在 Linq 中使用 lambda 表达式 -

        var result= (from li in List.Distinct().OrderByDescending(x => x.time)
                               select li).FirstOrDefault();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-29
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多