我有一个类似这样的查询:
var caseList = (from x in context.Cases
where allowedCaseIds.Contains(x => x.CaseId)
select new Case {
CaseId = x.CaseId,
NotifierId = x.NotifierId,
Notifier = x.NotifierId.HasValue ? new Notifier { Name = x.Notifier.Name } : null // This line throws exception
}).ToList();一个Case类可以有0..1 Notifier
上面的查询将导致以下System.NotSupportedException
无法创建“Models.Notifier”类型的空常量值。在此上下文中只支持实体类型、枚举类型或基本类型。
目前,我找到的唯一解决办法是在查询之后循环查询结果,然后手动填充Notifier,如下所示:
foreach (var c in caseList.Where(x => x.NotifierId.HasValue)
{
c.Notifier = (from x in context.Notifiers
where x.CaseId == c.CaseId
select new Notifier {
Name = x.Name
}).FirstOrDefault();
}但是我真的不想这样做,因为在我的实际场景中,它会生成数百个额外的查询。
对这种情况有什么可能的解决办法吗?
发布于 2016-01-26 13:20:08
我觉得你应该分两步做。首先,您只能在一个查询中使用匿名类型获取所需的数据:
var caseList = (from x in context.Cases
where allowedCaseIds.Contains(x => x.CaseId)
select new {
CaseId = x.CaseId,
NotifierId = x.NotifierId,
NotifierName = x.Notifier.Name
}).ToList();之后,您可以在内存中工作:
List<Case> cases = new List<Case>();
foreach (var c in caseList)
{
var case = new Case();
case.CaseId = c.CaseId;
case.NotifierId = c.NotifierId;
case.NotifierName = c.NotifierId.HasValue ? c.NotifierName : null;
cases.Add(case);
}https://stackoverflow.com/questions/35014610
复制相似问题