VVS*_*VVS 1 c# linq-to-objects
我想获得满足给定条件的第一个项目,如果没有一个项目符合该条件,我只想获得第一个项目
这就是我目前所做的和有效的,但我不喜欢它。在一个 LINQ 查询中是否有更优雅的方法来做同样的事情?
LookupLine lookup;
Func<KeyValuePair<int,LookupLine>,bool> criteria =
(kv) => !kv.Value.Gruppe.StartsWith("SF");
if (lookupLines.Any(criteria))
{
lookup = lookupLines.First(criteria).Value;
}
else if (lookupLines.Any())
{
lookup = lookupLines.First().Value;
}
FirstRelevantGroup = lookup.Gruppe;
Run Code Online (Sandbox Code Playgroud)
好吧,对于单线,你可以做
lookupLines.OrderBy(kv => kv.Value.Gruppe.StartsWith("SF") ? 2 : 1).First();
Run Code Online (Sandbox Code Playgroud)
但我认为您的解决方案更好地传达了您的意图,尽管它可以简化为:
LookupLine lookup = lookupLines.FirstOrDefault(kv => !kv.Value.Gruppe.StartsWith("SF"));
if(lookup == null) {
lookup = lookupLines.First();
}
FirstRelevantGroup = lookup.Value.Gruppe;
Run Code Online (Sandbox Code Playgroud)
现在,您可以将上述内容合并,但同样会失去一些可读性:
FirstRelevantGroup = (
lookupLines.FirstOrDefault(kv => !kv.Value.Gruppe.StartsWith("SF"))
?? lookupLines.First()
).Value.Gruppe;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |