我也面臨同樣的問題: 「指定的LINQ表達包含對與不同上下文關聯的查詢的引用。「 這是因爲它無法一次連接到兩個上下文,所以我找到如下的解決方案。 在這裏,在這個例子中,我想用所有者名稱列出的抽獎卡,但其所有者名稱表是在另一個Database.So我做了兩個方面DB1Context和DB2Context.and寫的代碼如下:
var query = from lc in db1.LotteryCardMaster
from om in db2.OwnerMaster
where lc.IsActive == 1
select new
{
lc.CashCardID,
lc.CashCardNO,
om.PersonnelName,
lc.Status
};
AB.LottryList = new List<LotteryCardMaster>();
foreach (var result in query)
{
AB.LottryList.Add(new LotteryCardMaster()
{
CashCardID = result.CashCardID,
CashCardNO = result.CashCardNO,
PersonnelName =result.PersonnelName,
Status = result.Status
});
}
但這給了我上面的錯誤,所以我發現另一種方式來執行從不同的數據庫中的兩個表加入,這種方式如下。
var query = from lc in db1.LotteryCardMaster
where lc.IsActive == 1
select new
{
lc.CashCardID,
lc.CashCardNO,
om.PersonnelName,
lc.Status
};
AB.LottryList = new List<LotteryCardMaster>();
foreach (var result in query)
{
AB.LottryList.Add(new LotteryCardMaster()
{
CashCardID = result.CashCardID,
CashCardNO = result.CashCardNO,
PersonnelName =db2.OwnerMaster.FirstOrDefault(x=>x.OwnerID== result.OwnerID).OwnerName,
Status = result.Status
});
}
單個表是否足夠小以適應內存?兩張桌子中的哪一張比另一張大得多? – dasblinkenlight 2014-10-02 19:57:11
Linq將優化查詢發送到數據庫,因此如果有兩個上下文,就不可能將優化查詢發送到數據庫。正如@dasblinkenlight所說,如果表很小,請將數據帶到內存中,並在IEnumerable上執行連接,而不是Iqueryable。 – 2014-10-02 20:02:02
@dasblinkenlight MyStrings是一個小表。 – 2014-10-02 20:22:43