![](/img/trans.png)
[英]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.