我有以下语句,它始终返回null:
var addins = allocations.SelectMany(
set => set.locations.Any(q => q.IsMatch(level, count))
? (List<string>)set.addins : null
);
Run Code Online (Sandbox Code Playgroud)
我稍微改了一下,现在工作正常:
var addins = allocations.SelectMany(
set => set.locations.Any(q => q.IsMatch(level, count))
? set.addins : new List<string>()
);
Run Code Online (Sandbox Code Playgroud)
我的主要问题:为什么在LINQ的上下文中,null不能作为三元运算符的返回类型?
次要问题:有没有更聪明的方法来制定上述查询(特别是如果它消除了"新名单()")?
Qua*_*ter 11
Enumerable.SelectMany将尝试枚举lambda返回的序列,并抛出NullReferenceException尝试在null上调用GetEnumerator().您需要提供实际的空序列.您可以使用Enumerable.Empty而不是创建新列表:
var addins = allocations.SelectMany(
set => set.locations.Any(q => q.IsMatch(level, count))
? (List<string>)set.addins : Enumerable.Empty<string>()
);
Run Code Online (Sandbox Code Playgroud)
我怀疑你真正想要的是在SelectMany之前调用Where来过滤掉你不想要的集合:
var addins = allocations
.Where(set => set.locations.Any(q => q.IsMatch(level, count)))
.SelectMany(set => (List<string>)set.addins);
Run Code Online (Sandbox Code Playgroud)
或者,在查询语法中:
var addins =
from set in allocations
where set.locations.Any(q => q.IsMatch(level, count))
from addin in (List<string>)set.addins
select addin;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |