如何使用LINQ获取Count()的Max()

cvs*_*980 9 linq

我是LINQ的新手,我有这种情况.我有这张桌子:

ID Date  Range
1 10/10/10 9-10
2 10/10/10 9-10
3 10/10/10 9-10
4 10/10/10 8-9
5 10/11/10 1-2
6 10/11/10 1-2
7 10/12/10 5-6
Run Code Online (Sandbox Code Playgroud)

我只想按范围列出每个日期行的最大值,如下所示:

Date  Range  Total
10/10/10 9-10  3
10/11/10 1-2  2
10/12/10 5-6  1
Run Code Online (Sandbox Code Playgroud)

我想通过使用LINQ来做到这一点,你有任何想法如何做到这一点?

Str*_*ior 6

我认为这些方面应该有效:

List<MyTable> items = GetItems();
var orderedByMax = from i in items
                   group i by i.Date into g
                   let q = g.GroupBy(i => i.Range)
                            .Select(g2 => new {Range = g2.Key, Count = g2.Count()})
                            .OrderByDescending(i => i.Count)
                   let max = q.FirstOrDefault()
                   select new {
                      Date = g.Key,
                      Range = max.Range,
                      Total = max.Count
                   };
Run Code Online (Sandbox Code Playgroud)


Jla*_*Jla 5

使用扩展方法:

List<MyTable> items = GetItems();

var rangeTotals = items.GroupBy(x => new { x.Date, x.Range }) // Group by Date + Range
                  .Select(g => new { 
                              Date = g.Key.Date, 
                              Range = g.Key.Range, 
                              Total = g.Count() // Count total of identical ranges per date
                              });

var rangeMaxTotals = rangeTotals.Where(rt => !rangeTotals.Any(z => z.Date == rt.Date && z.Total > rt.Total)); // Get maximum totals for each date
Run Code Online (Sandbox Code Playgroud)


Abe*_*ler 1

不幸的是我现在无法测试这个但尝试一下:

List<MyTable> items = GetItems();
items.Max(t=>t.Range.Distinct().Count());
Run Code Online (Sandbox Code Playgroud)