![](/img/trans.png)
[英]How to make an anonymous type property nullable in the select of a linq to sql query
[英]How to assign a nullable int property in an anonymous type in LINQ with a Union?
我在LINQ中有两个带有Union
选择语句。
RoleID
在选择项之一中必须具有空值。 我收到下面的错误。
如果RoleID
有值,则可以正常工作。 报告是具有属性的EF实体。
在这个例子中可以是任何东西。 出于说明目的,示例很简单。
LinqPad中的代码:
var list = Reports.Select(r => new
{
RoleID = 3
})
.Union(Reports.Select(r => new
{
RoleID = new Nullable<int>() <= error
//RoleID = (int?) null <= error
//RoleID = 4 <= works
}));
list.Dump();
如何使其与null值一起使用并使RoleID类型为int?
错误信息:
'System.Linq.IQueryable'不包含'Union'的定义,最佳扩展方法重载'System.Linq.ParallelEnumerable.Union(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable)'具有一些无效的参数实例参数:无法从“ System.Linq.IQueryable”转换为“ System.Linq.ParallelQuery”
您的第一个Select
查询返回RoleID
类型为int
的匿名对象序列。 要合并两个序列,它们应具有相同类型的匿名对象。 因此,您需要更改第一个查询:
var list = Reports.Select(r => new
{
RoleID = (int?)3
})
请记住,在第二个查询中,您还应该具有可为空的RoleID
以匹配匿名对象的类型:
.Union(Reports.Select(r => new
{
RoleID = new Nullable<int>()
//RoleID = (int?)null
//RoleID = (int?)4
}));
顺便说一句,为什么在同一来源的两个选择上有并集? 看起来您过度简化了示例查询。
您还需要RoleID
在第一个匿名类中也可以为空:
Reports.Select(r => new
{
RoleID = (int?)3
}
另请参阅以下问题:
Concat
,而不是Linq中的 Union
: Union Vs Concat
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.