使用linq比较参数中两个Max值的列表

时间:2017-09-21 16:36:02

标签: c# linq

我有一个Field对象列表,参数为(string)Name和(int)Size。

我还有一个File对象列表,每个对象都包含一个Field对象列表,其中一些可能出现在总体Field对象中。

我需要遍历所有Field对象,并找到所有可能的File-Field对象的最大值。

我能用嵌套3做到这一点吗? for循环,但我想知道这是否可以在linq。

List<fieldobject> mainfields;
List<fileobject> files;

在fileobject类中:

List<fieldobject> fields;

for循环中的基本概念是:

foreach (fieldobject field in mainfields)
    foreach (fileobject file in files)
        foreach (fieldobject fileField in file.fields)
            if (field.name == fileField.name)
                field.size = math.max(field.size,fileField.size);

我可以用linq替换if和赋值,但我希望摆脱大多数/所有的for循环。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果我理解正确file.fields是fileobject对象内的fileobject的内部列表,那么你需要使用SelectMany扩展方法:

foreach (fileobject field in mainfields)
{
    field.size = files.SelectMany(x => x.fields)
   .Where(y => y.name == field.name).Select(m => m.size).Max();
}

答案 1 :(得分:0)

你可以拥有类似的东西;

foreach (fieldobject field in mainfields)
{
    int maxFileSize = files.Where(f => f.name == field.name)
                           .Select(f => f.size)
                           .Max();
    if (field.size < maxFileSize)
    {
         field.size = maxFileSize;
    }
}