簡體   English   中英

將兩個模型合並在一起會導致“指定的LINQ表達式包含對與不同上下文關聯的查詢的引用。”

[英]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()粘貼到uniSearchResultlahSearchResult變量聲明的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM