2013-03-12 64 views
1

运行此查询来创建一个恒定值:无法在LINQ查询

var holderAccounts = db.AccountDetails.Include(p => p.BranchDetail) 
       .Where(p => holder.AccountDetails.Any(a => a.Id == p.Id)); 

我得到这个异常:

无法创建类型的常量值“CodeFirst.AccountDetail”。只有原始类型或枚举类型在此上下文中受支持。

关系是:

AccountHolder 1 to many AccountDetail 1 to 1 BranchDetail 

我在做什么错?

+1

什么是“持有人”? – mellamokb 2013-03-12 18:29:26

+0

持有人是AccountHolder实体的对象 – user1740381 2013-03-12 18:31:09

回答

1

先尝试提取相关的ID:

var accountDetailIds = holder.AccountDetails.Select(a => a.Id); 
var holderAccounts = db.AccountDetails 
    .Include(p => p.BranchDetail) 
    .Where(p => accountDetailIds.Contains(p.Id)); 
1

最有可能的是,Any()不受支持。试试这个查询:

var ids = holder.AccountDetails.Select(x => x.Id).ToList(); 
var holderAccounts = db.AccountDetails.Include(p => p.BranchDetail) 
      .Where(p => ids.Contains(p.Id)); 
+1

它看起来应该是'Select'而不是'SelectMany'。值得注意的是,这只是一个选项,如果有很少的ID的集合,如果有很多这不起作用(或不能很好地工作)。 – Servy 2013-03-12 18:47:45

+0

事实上,它很可能是一个“选择” – Dima 2013-03-13 06:17:49

0

我认为你正在试图做的是相同的SQL凡-IN子句。正如Jeffery Khan所说,我会提取您要查询的标准,然后在单独的语句中执行查询。希望这article将帮助您了解这种用于增强查询可读性的良好实践。