2013-03-12 65 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將幫助您瞭解這種用於增強查詢可讀性的良好實踐。