繁体   English   中英

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

[英]how to use linq to retrieve values from a 2 dimensional generic list

我有一个通用的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]的匿名列表,但是现在我想找出最小的计数,并为与此匹配的所有计数返回一个子列表。

谁能帮我这个忙吗?

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

foreach(var x in smallestGroup)
{
    var poolTray = x.tray;
}

您可以使用SelectMany来“拉平”列表。 意思是,将所有列表合并为一个,然后取Min。 所以;

  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()

我想可能有可能在一句话中做到这一点

您可以使用Tim...回答的GroupByOrderBy进行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM