【发布时间】:2016-07-12 14:50:17
【问题描述】:
我正在尝试使用联合实现对实体框架的 LINQ 查询。假设我有 2 个表:Users 和 TempUsers。我尝试:
var users = context.Users
.Select(u => new UserModel
{
Name = u.Name,
Roles = u.Roles.Select(r => r.Id)
})
.Union(context.TempUsers
.Select(u => new UserModel
{
Name = u.Name,
Roles = null
}))
.ToList();
模型类:
public class UserModel
{
public string Name { get; set; }
public IEnumerable<int> Roles { get; set; }
}
我收到NotSupportedException 的消息:
无法创建类型为空的常量值 'System.Collections.Generic.IEnumerable`1[[System.Int32,mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]'。 仅支持实体类型、枚举类型或原始类型 在这种情况下。
如果我删除 Roles = null,我会收到带有消息的 NotSupportedException:
类型“UserModel”出现在两个 单个 LINQ 中结构上不兼容的初始化 实体查询。一个类型可以在同一个地方的两个地方初始化 查询,但前提是在两个地方都设置了相同的属性并且 这些属性的设置顺序相同。
一个想法如何解决它?谢谢!
【问题讨论】:
-
您是否尝试在第二个查询中删除
Roles=null?我认为您不需要这样做,两个结果都是相同的类型 -
@octavioccl 我试过了。请查看更新后的问题。
-
您是否尝试过在将它们合并到 UserModel 中之前?
-
@octavioccl 我想将不同表的结果合并到 1 个模型并不常见。
-
您能否更新您的问题以显示 UserModel,尤其是角色类型
标签: c# .net sql-server entity-framework linq