繁体   English   中英

如何在带有Union的LINQ中以匿名类型分配可为null的int属性?

[英]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
               }

另请参阅以下问题:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM