繁体   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