将两个模型结合在一起导致 "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%,因为我已经完成了让我走到这一步的研究。但是,我在 运行 期间收到一条错误消息,显示 "The specified LINQ expression contains references to queries that are associated with different contexts."

这是我的代码:

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 个 IQueryables。

错误非常简单明了。您有两个上下文在起作用,您正在从两个上下文中查询项目,然后尝试将它们合并为一个。这不可能。

但是,这里的问题只是您尚未评估查询。只要您意识到需要对每个上下文进行单独的查询,您就可以在尝试联合之前简单地评估它们。评估(将查询发送到数据库)是即时完成的,因此直到您执行某些需要数据库中实际值的操作(迭代、转换为列表等)时才会发生。这里最简单的解决方案是将 .ToList() 添加到 uniSearchResultlahSearchResult 变量声明的末尾。