我是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
我只想按范围列出每个日期的最大行数,如下所示:
Date Range Total
10/10/10 9-10 3
10/11/10 1-2 2
10/12/10 5-6 1
我想用LINQ来做这件事,你有什么办法吗?
发布于 2010-11-17 07:57:42
我认为以下几点应该是可行的:
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
};
发布于 2010-11-17 22:40:03
使用扩展方法:
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
发布于 2010-11-17 07:40:46
不幸的是,我现在不能测试它,但试一试:
List<MyTable> items = GetItems();
items.Max(t=>t.Range.Distinct().Count());
https://stackoverflow.com/questions/4200126
复制相似问题