Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Linq简化为对象结果_C#_Linq_C# 4.0 - Fatal编程技术网

C# 将Linq简化为对象结果

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

我不确定“简化”一词是否适合这种情况?但是,我有一个Linq查询lile如下:

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
相同的谓词。