简化Linq to Object结果

时间:2017-01-17 10:18:11

标签: c# linq c#-4.0

我不确定“Simplifiying”这个词是否适合这种情况?但是,我在下面有一个Linq Query lile:

result.FIRSTOBJECT
   .Select(x => x.SECONDOBJECT
       .Select(y => y.THIRDOBJECT
           .Where(j => j.Key.Contains("Something"))));

我得到的结果对象就像屏幕截图一样。

我的问题:有没有办法可以让这个结果不被嵌套?

2 个答案:

答案 0 :(得分:3)

使用SelectMany代替

result = result.FIRSTOBJECT
.SelectMany(x => x.SECONDOBJECT
   .SelectMany(y => y.THIRDOBJECT
       .Where(j => j.Key.Contains("Something"))));

var finalresult = result.FirstOrDefault();

答案 1 :(得分:3)

所以你想要整理序列?然后,您可以使用SelectMany

var allMathingThirdObjects = result.FIRSTOBJECT
    .SelectMany(x => x.SECONDOBJECT.SelectMany(y => y.THIRDOBJECT))
    .Where(j => j.Key.Contains("Something"));

您可以将结果循环到foreach或创建一个集合(例如allMathingThirdObjects.ToList())或选择第一个:

var firstMatchingThird = allMathingThirdObjects.FirstOrDefault(); // null if no match

或将Key属性选择为单个字符串:

string allMatchingThirdKeys = String.Join(", ", allMathingThirdObjects.Select(j => j.Key));