2016-06-22 4 views
0

Ich habe ein Projekt, an dem ich arbeite, das derzeit für ein Modell arbeitet. Jetzt muss ich ein anderes Modell an die gleiche Liste anschließen. Ich glaube, ich bin zu 90% dort, da ich Forschung betrieben habe, die mich bis hierher gebracht hat. Ich erhalte jedoch während der Laufzeit einen Fehler, der besagt: "Der angegebene LINQ-Ausdruck enthält Verweise auf Abfragen, die verschiedenen Kontexten zugeordnet sind."Union zwei Modelle zusammen verursacht "Der angegebene LINQ-Ausdruck enthält Verweise auf Abfragen, die verschiedenen Kontexten zugeordnet sind."

Hier ist mein Code:

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); 

Dies ist die Codezeile, wo ich die Fehlermeldung:

var SearchResult = uniSearchResult.Union(lahSearchResult); 

Antwort

1

Der Fehler ist ziemlich einfach. Sie haben zwei Kontexte im Spiel, Sie fragen Elemente von beiden ab und versuchen dann, sie zu einer zu kombinieren. Das ist nicht möglich.

Das Problem hier ist jedoch nur, dass Sie die Abfrage noch nicht ausgewertet haben. Während Sie feststellen, dass für jeden Kontext separate Abfragen erforderlich sind, können Sie diese einfach auswerten, bevor Sie die Union versuchen. Die Auswertung (das Senden der Abfrage an die Datenbank) erfolgt just-in-time. Dies geschieht erst, wenn Sie eine Aktion ausführen, die die tatsächlichen Werte aus der Datenbank erfordert (Iteration, Umwandlung in eine Liste usw.). Die einfachste Lösung ist hier, einfach .ToList() auf das Ende der Variablen uniSearchResult und lahSearchResult Variablen zu kleben.

+0

Chris wie üblich, du bist der Mann. – djblois

2

ändern diese 2 Linien

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" }); 

zu

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() wird die Abfragen tatsächlich ausführen und Ihre Objekte auffüllen. Ohne die .ToList() versuchen Sie 2 IQeryables zusammenzuführen, die mit ihren individuellen Kontexten verknüpft sind.

Verwandte Themen