1

我有一个通用列表 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();

这给了我 [count, Tray] 的匿名列表,但现在我想找出最小的计数,并返回与此匹配的所有计数的子列表。

谁能帮我解决这个问题?

4

4 回答 4

2
var smallestGroup = traysWithExtraAisles
    .GroupBy(x => x.count)
    .OrderBy(g => g.Key)
    .First();

foreach(var x in smallestGroup)
{
    var poolTray = x.tray;
}
于 2013-08-05T23:29:05.507 回答
0

您可以使用SelectMany“扁平化”您的列表。意思是,将所有列表合并为一个,然后取最小值。所以;

  int minimum = poolTrays.SelectMany(x => x).Min(x => x.TheIntegerIWantMinOf);

将为您提供子列表中包含的最小值。我不完全确定这是您要求的,但如果您的目标只是找到集合中最小的元素,那么我会废弃您发布的代码并改用它。

于 2013-08-05T23:30:09.913 回答
0

是的,我现在意识到这实际上非常容易,只需多摆弄一下。我已经和

int minCount = traysWithExtraAisles.Min(x=>x.count);
var minAislesList = (from t in trayswithExtraAisles
                     where t.count==mincount
                     select t).ToList()

我想有可能在一个声明中做到这一点

于 2013-08-05T23:39:35.930 回答
-1

您可以按以下方式使用GroupByTim...OrderBy以下方式使用:

var result = traysWithExtraAisles.OrderBy(x=>x.count)
                                 .TakeWhile((x,i)=> i == 0 || x.count == traysWithExtraAisles[i-1]).count;
于 2013-08-05T23:40:42.550 回答