删除空值后,将IQueryable <int?>转换为IQueryable <int>

时间:2019-08-24 19:14:34

标签: c# linq nullable iqueryable

我有一个IQueryable<int>和一个IQueryable<int?>,在处理的较早阶段已使用Where()从中删除了空值。我现在希望在两个可查询对象之间执行UNION(),但由于一个是可空类型,而另一个不是我不能。

我该如何解决?

2 个答案:

答案 0 :(得分:5)

如果您的IQueryable<int?>对象没有null,那么您应该可以使用.Select()调用将其“转换”为IQueryable<int>

int?[] withNulls = new int?[] { 1, null, 0, 2, 3, 4, null, 1, 6 };
int[] noNulls = new int[] { 10, -4, 30, 6, 7, 8, -2, -3 };

                                                                 // This is the step you need.
var removedNulls = withNulls.AsQueryable().Where(n => n.HasValue).Select(n => n.Value);
var union = removedNulls.Union(noNulls);

打印removedNullsunion给我

1 0 2 3 4 1 6 
1 0 2 3 4 6 10 -4 30 7 8 -2 -3

答案 1 :(得分:3)

您可以仅使用SelectValue投射它们。

queryable.Select(i => i.Value)