我有一个通用的List List [int,myClass],我想找到最小的int值,并从列表中检索与之匹配的项目。
我是从另一个LINQ语句生成的
var traysWithExtraAisles = (from t in poolTrays
where t.TrayItems.Select(i=>i.Aisle)
.Any(a=> ! selectedAisles.Contains(a))
select new
{
count= t.TrayItems.Select(i=>i.Aisle)
.Count(a=> !selectedAisles.Contains(a)),
tray=t
}).ToList();
这给了我[匿名,托盘]的匿名列表,但现在我想弄清楚最小的数量,并返回与此匹配的所有计数的子列表。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
var smallestGroup = traysWithExtraAisles
.GroupBy(x => x.count)
.OrderBy(g => g.Key)
.First();
foreach(var x in smallestGroup)
{
var poolTray = x.tray;
}
答案 1 :(得分:0)
您可以使用SelectMany
来“压扁”您的列表。意思是,将所有列表合并为一个,然后取Min。所以;
int minimum = poolTrays.SelectMany(x => x).Min(x => x.TheIntegerIWantMinOf);
将为您提供子列表中包含的最小值。我不完全确定这是你要求的,但如果你的目标只是找到收藏中的最小元素,那么我会废弃你发布的代码并改用它。
答案 2 :(得分:0)
是的,我现在意识到这实际上是非常容易做的更多摆弄。
我已经去了int minCount = traysWithExtraAisles.Min(x=>x.count);
var minAislesList = (from t in trayswithExtraAisles
where t.count==mincount
select t).ToList()
我想可能在一个陈述中做到这一点
答案 3 :(得分:-1)
您可以按照GroupBy
或Tim...
的回答使用OrderBy
,如下所示:
var result = traysWithExtraAisles.OrderBy(x=>x.count)
.TakeWhile((x,i)=> i == 0 || x.count == traysWithExtraAisles[i-1]).count;