我是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来做到这一点,你有任何想法如何做到这一点?
我认为这些方面应该有效:
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)
使用扩展方法:
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)
不幸的是我现在无法测试这个但尝试一下:
List<MyTable> items = GetItems();
items.Max(t=>t.Range.Distinct().Count());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8962 次 |
| 最近记录: |