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

Mar*_*in 0 c# linq nullable iqueryable

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

我该如何解决?

mat*_*c95 5

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

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);
Run Code Online (Sandbox Code Playgroud)

打印removedNullsunion给我

1 0 2 3 4 1 6 
1 0 2 3 4 6 10 -4 30 7 8 -2 -3
Run Code Online (Sandbox Code Playgroud)