C# 将Linq简化为对象结果
我不确定“简化”一词是否适合这种情况?但是,我有一个Linq查询lile如下:C# 将Linq简化为对象结果,c#,linq,c#-4.0,C#,Linq,C# 4.0,我不确定“简化”一词是否适合这种情况?但是,我有一个Linq查询lile如下: result.FIRSTOBJECT .Select(x => x.SECONDOBJECT .Select(y => y.THIRDOBJECT .Where(j => j.Key.Contains("Something")))); 我得到的结果对象类似于上面的屏幕截图 我的问题:有没有办法让这个结果不那么嵌套 改用选择many result = re
result.FIRSTOBJECT
.Select(x => x.SECONDOBJECT
.Select(y => y.THIRDOBJECT
.Where(j => j.Key.Contains("Something"))));
我得到的结果对象类似于上面的屏幕截图
我的问题:有没有办法让这个结果不那么嵌套 改用
选择many
result = result.FIRSTOBJECT
.SelectMany(x => x.SECONDOBJECT
.SelectMany(y => y.THIRDOBJECT
.Where(j => j.Key.Contains("Something"))));
var finalresult = result.FirstOrDefault();
改用
SelectMany
result = result.FIRSTOBJECT
.SelectMany(x => x.SECONDOBJECT
.SelectMany(y => y.THIRDOBJECT
.Where(j => j.Key.Contains("Something"))));
var finalresult = result.FirstOrDefault();
所以你想把序列展平?然后您可以使用
选择many
:
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
或者将键
属性选择为单个字符串:
string allMatchingThirdKeys = String.Join(", ", allMathingThirdObjects.Select(j => j.Key));
所以你想把序列展平?然后您可以使用
选择many
:
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
或者将键
属性选择为单个字符串:
string allMatchingThirdKeys = String.Join(", ", allMathingThirdObjects.Select(j => j.Key));
你为什么喜欢这个?任何Linq方法都只返回一个迭代器,而不是实际值。只有在调用
ToList
或ToArray
甚至foreach
时,才会执行实际查询,生成结果值。因为,我需要最终结果,而选择最终结果时,代码会变得非常难看。我试着做一个ToList(),但它又变成了3个嵌套列表。你为什么喜欢这个?任何Linq方法都只返回一个迭代器,而不是实际值。只有在调用ToList
或ToArray
甚至foreach
时,才会执行实际查询,生成结果值。因为,我需要最终结果,而选择最终结果时,代码会变得非常难看。我试着做了一个ToList(),但它又变成了3个嵌套列表。你可以通过将Where
替换为FirstOrDefault
来缩短,它将接受与Where
相同的谓词。你可以通过将Where
替换为FirstOrDefault
来缩短,它将接受与Where
相同的谓词。