如何使用linq从二维泛型列表中检索值

本文关键字:泛型 二维 列表 检索 linq 何使用 | 更新日期: 2023-09-27 18:26:28

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

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

有人能帮我吗?

如何使用linq从二维泛型列表中检索值

var smallestGroup = traysWithExtraAisles
    .GroupBy(x => x.count)
    .OrderBy(g => g.Key)
    .First();
foreach(var x in smallestGroup)
{
    var poolTray = x.tray;
}

您可以使用SelectMany来"压平"您的列表。意思是,将所有列表合并为一个,然后取Min-So;

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

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

好吧,我现在意识到,只要多花一点时间,这实际上非常容易做到。我选择了

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

我想在一个语句

中可能做到这一点

您可以使用GroupBy作为Tim...OrderBy的答案,如下所示:

var result = traysWithExtraAisles.OrderBy(x=>x.count)
                                 .TakeWhile((x,i)=> i == 0 || x.count == traysWithExtraAisles[i-1]).count;