我想将以下代码片段转换为 LINQ。目标是在内部集合中找到匹配项并返回其 Data 属性。有什么建议么?
string data = null;
foreach (var section in sections)
{
foreach (var field in section.Fields)
{
if (field.Id == id)
{
data = field.Data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用SelectMany展平集合,然后使用Where
var matches = sections
.SelectMany(s => s.Fields)
.Where(f => f.Id == id)
.Select(f => f.Data);
Run Code Online (Sandbox Code Playgroud)
现在matches包含所有匹配的数据字符串。如果您只有一个匹配,您可以使用Single(或者SingleOrDefault如果可能没有)来获取该单独的值。如果您可能有更多匹配项,请使用FirstOrDefault或LastOrDefault。(在您的代码中,Last是会给您相同答案的方法)
您可以将所有这些放在一起并简化:
data = sections
.SelectMany(s => s.Fields)
.SingleOrDefault(f => f.Id == id)
?.Data;
Run Code Online (Sandbox Code Playgroud)
请注意?以防万一您没有匹配项。
| 归档时间: |
|
| 查看次数: |
2948 次 |
| 最近记录: |