2017-08-03 18 views
0

早上好,有關特定屬性的EF6 IN子句

我在EF查詢時遇到了問題。這是我想要做的。

首先,我很拉ID的名單像這樣(ID列表是在包括x.MappingAccts實體中找到):

Entities.DB1.Mapping mapping = null; 
using (var db = new Entities.DB1.DB1Conn()) 
{ 
    mapping = db.Mappings.Where(x => x.Code == code).Include(x => x.MappingAccts).FirstOrDefault(); 
} 

後來,我試圖做一個不同的數據庫查詢對標識的名單我在上面拉(本質上是一個IN子句):

using (var db = new Entities.DB2.DB2Conn()) 
{ 
    var accounts = db.Accounts.Where(mapping.MappingAccts.Any(y => y.Id == ?????????)).ToList(); 
} 

正如你可以看到我只得到了部分的方式與此有關。

基本上我需要做的是根據它的ID列查詢帳戶表,並拉出匹配mapping.MappingAccts.Id列的所有記錄。

我發現的大多數例子都很好地解釋瞭如何針對單維數組做這件事,但我正在比較特定的列。

任何協助都會很棒。

豬兔

回答

0

這會給由MappingAccts

using (var db = new Entities.DB2.DB2Conn()) 
{ 
    var accounts = db.Accounts.Where(s => mapping.MappingAccts.Any(y => y.Id == s.Id)).ToList(); 
} 
+0

使用此方法時出現以下錯誤:無法創建類型爲'Entities.DB1.MappingAcct'的常量值。只有原始類型或枚舉類型在此上下文中受支持。 – Nugs

1

包含具有的ID賬戶列表中的IN子句是使用IEnumberable.Contains

生成來自第一DB1上下文,物化Id的列表

var idList = mapping.MappingAccts.Select(m => m.Id).ToList(); 

然後在對ID的

var accounts = db.Accounts.Where(a => idList.Contains(a.Id)).ToList(); 

唯一的問題的物化列表中的第二上下文查詢你可能是用的ID在第一個列表中獲得的量。你可能會用sql查詢達到極限。

+0

是的。這就是爲什麼我實現了一個沒有鏈接到第一個dbcontext的id列表。然後做一個包含。 – Fran

+0

對不起,我在發表評論之後意識到你已經處理了。在你回答之前,我試圖刪除評論,但你太快了。 –

+0

@BradleyUffner沒問題。我編輯答案更清晰。 – Fran