根据属性的最小值从集合中查找项目

mil*_*lie 2 c# linq lambda

我定义了以下对象:

public class MyGroup
{
    public MyItem[] Items;
}

public class MyItem
{
    public int Val;
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个列表作为List,其中每个MyGroup对象包含不同数量的MyItems; 这反过来包含Val的变化值.

如何在所有MyGroup对象中找到包含最低Val的MyGroup对象子集.

例如:如果我使用以下值定义列表

  • MyGroup1包含以下每个值的MyItem:1,5和7
  • MyGroup2包含以下每个值的MyItem:3和
    8
  • MyGroup3包含以下每个值的MyItem:2,4,5和7

然后返回的值将是MyGroup1(作为单个项目列表),因为它包含值1,它是所有值中的最低值.

但是,如果有多个值具有最低值,例如:

  • MyGroup1包含以下每个值的MyItem:1,5和7
  • MyGroup2包含以下每个值的MyItem:3和8
  • MyGroup3包含以下每个值的MyItem:1,4,5和7

然后它将在列表中返回MyGroup1MyGroup3.

提前致谢.

Ser*_*rvy 5

int lowestValue = groups.SelectMany(group => group.Items)
                  .Min(item => item.Val);

IEnumerable<MyGroup> result = groups.Where(group => 
    group.Items.Select(item => item.Val).Contains(lowestValue));
Run Code Online (Sandbox Code Playgroud)

这将是一个两遍算法.如果你有足够的动力,你可以通过在搜索最小值时跟踪包含最小值的所有项目来一次性完成.