[英]Error-“The specified LINQ expression contains references to queries that are associated with different contexts.”
[英]Union two models together causes “The specified LINQ expression contains references to queries that are associated with different contexts.”
我有一個正在處理的項目,目前正在為一種模型工作。 現在,我需要將另一個模型合並到同一列表中。 我相信我90%都在那,因為我做過的研究已經使我到目前為止。 但是,我在運行時收到一條錯誤消息:“指定的LINQ表達式包含對與不同上下文相關聯的查詢的引用。”
這是我的代碼:
var unimodel = from order in uni.Orders
select order;
var lAHmodel = from other in lah.OtherOrder
select other;
if (searchOrders.SearchStartDate.HasValue)
{
unimodel = unimodel.Where(o => o.OrderDate >= searchOrders.SearchStartDate);
lAHmodel = lAHmodel.Where(o => o.OrderTime >= searchOrders.SearchStartDate);
}
if (searchOrders.SearchEndDate.HasValue)
{
unimodel = unimodel.Where(o => o.OrderDate <= searchOrders.SearchEndDate);
lAHmodel = lAHmodel.Where(o => o.OrderTime <= searchOrders.SearchEndDate);
}
var uniSearchResult = unimodel.Select(x => new SearchResultViewModel { OrderNumber = x.OrderId, PaymentName = x.PaymentFullName, OrderDate = x.OrderDate, Amount = x.Total, Site = "University" });
var lahSearchResult = lAHmodel.Select(x => new SearchResultViewModel { OrderNumber = x.OrderId, PaymentName = x.PaymentCardholderName, OrderDate = x.OrderTime, Amount = x.Price, Site = "Series 50" });
var SearchResult = uniSearchResult.Union(lahSearchResult);
return View(SearchResult);
這是我收到錯誤的代碼行:
var SearchResult = uniSearchResult.Union(lahSearchResult);
更改這兩行
var uniSearchResult = unimodel.Select(x => new SearchResultViewModel { OrderNumber = x.OrderId, PaymentName = x.PaymentFullName, OrderDate = x.OrderDate, Amount = x.Total, Site = "University" });
var lahSearchResult = lAHmodel.Select(x => new SearchResultViewModel { OrderNumber = x.OrderId, PaymentName = x.PaymentCardholderName, OrderDate = x.OrderTime, Amount = x.Price, Site = "Series 50" });
至
var uniSearchResult = unimodel.Select(x => new SearchResultViewModel { OrderNumber = x.OrderId, PaymentName = x.PaymentFullName, OrderDate = x.OrderDate, Amount = x.Total, Site = "University" }).ToList();
var lahSearchResult = lAHmodel.Select(x => new SearchResultViewModel { OrderNumber = x.OrderId, PaymentName = x.PaymentCardholderName, OrderDate = x.OrderTime, Amount = x.Price, Site = "Series 50" }).ToList();
.ToList()實際上將運行查詢並填充您的對象。 如果沒有.ToList(),則您嘗試合並鏈接到其各自上下文的2個IQueryable。
該錯誤非常簡單。 您正在使用兩個上下文,您要從兩個上下文中查詢項目,然后嘗試將它們組合為一個。 那不可能
但是,這里的問題只是您尚未評估查詢。 隨着您意識到需要對每個上下文進行單獨的查詢,您可以在嘗試合並之前簡單地對它們進行評估。 評估(將查詢發送到數據庫)是及時完成的,因此直到您執行一些需要數據庫中實際值的操作(迭代,轉換為列表等)之后,評估才發生。 這里最簡單的解決方案是將.ToList()
粘貼到uniSearchResult
和lahSearchResult
變量聲明的末尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.