Zusammenfügen von zwei Abfragen und zurückgeben in Form einer Liste
Ich bin der Entwicklung einer MVC-Anwendung.
Ich bin mit den beiden Abfragen zum abrufen der Scheibe, und ich möchte, um die gemeinsamen Datensätze aus diesen Abfragen .
Möchte ich zu dem zurückkehren der Datensatz in der Liste
Wie diese
return Json(poList, JsonRequestBehavior.AllowGet);
Meine zwei Fragen sind..
var poList = (from po in db.PurchaseOrders
where po.CompanyId == companyId && po.PartyId == partyId && (po.IsDeleted == false || po.IsDeleted == null)
select po into newPO
select new
{
Name = newPO.PONo,
Id = newPO.Id
});
//.ToList().OrderBy(e => e.Name);
var poList2 = (db.Employees.Where(x => x.Id == EmpID)
.SelectMany(x => x.Roles)
.SelectMany(x => x.Employees)
.Distinct()
.SelectMany(x => x.PurchaseOrders)
.Select(po => new { Name = po.PONo, Id = po.Id }));
var finalPO = from PO in poList.ToList().Union(poList2).ToList() select PO);
- Versuch mal: var finalPO = aus PO in der poList.ToList().Union(poList2.ToList())
- Nop...funktioniert Nicht...
- Lesen dieser Eintrag: stackoverflow.com/questions/4844660/... es sollte Ihnen helfen, mit Ihrem problem
- Welche Fehler haben Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht nicht denken, Sie brauchen die ToList() in der zwischen-Ergebnisse, nur die Verwendung der union-und machen die ToList in der letzten Folge, wie:
Der Grund Sie können nicht union ist, dass die beiden Listen zurück, andere Objekte.
In der ersten Liste gibt einen anonymen Typ mit den Mitgliedern
Name
undId
. Wenn, stattdessen, Sie wollte einfach nur zurück die Bestellungen in der Abfrage ein, dann könnte man verwenden Sie einfach die folgende:Müssen Sie möglicherweise Anhängen
.ToList()
zu der obigen Abfrage, um dieUnion(...)
Methode. Dann sollten Sie in der Lage sein, der union die zwei Sequenzen gemeinsam haben (vorausgesetztpoList2
ist auch eine Folge vondb.PurhaseOrders
Objekte.Umgekehrt, anstatt Sie zu verändern Abfrage für
poList
oben, könnten Sie die Abfrage ändern, die hinterpoList2
wie folgt vor, um den gleichen Effekt erzielen, aber unterschiedliche Ergebnisse:Persönlich, ich denke, die erste ist klar (es sei denn, es gibt viele Felder in der PO-Objekt und du musst nur die beiden, wie gezeigt).
UPDATE: sehe ich den ursprünglichen post editiert wurde, so dass beide Abfragen jetzt wieder das gleiche Objekt (oder Form-Objekt). Doch das Plakat ist immer noch versuchen zu kombinieren, die Ergebnisse falsch. Das poster ist mit noch eine weitere LINQ-Abfrage in einem Versuch zu verwenden, die
Union(...)
Methode. Dies ist völlig unnötig. Genauso gut könnte Sie schreiben den code, der für ihn/Sie:Das sollte es tun.
Wirklich, die beiden Bücher habe ich bereits in meinem Kommentar weiter unten erhalten Sie einen langen Weg in Verständnis .NET und LINQ: APress - Pro-C# und das .NET Framework 4.0; O ' Reilly - C# 5 in a Nutshell. Es gibt auch viele Bücher über LINQ allein--aber ohne ein tiefes Verständnis .NET (und C#, F# oder VB), Sie können nicht hoffen, zu verstehen, oder verwenden Sie LINQ.
Join(...)
- operator verwendet wird. Wenn Sie meinen, dieUnion
nennen, dann siehe meine obige Antwort. Sie versuchen, union zusammen zwei Sequenzen, aber die Sequenzen enthalten, die von verschiedenen Objekten. In Ihrer ursprünglichen Abfragen, die erste Sequenz gibt eine Sequenz von anonymen Objekten mit Form{Name, Id}
. Die zweite Folge gibt Objekte des Typsdb.PurchaseOrders
. Sie können nicht kombinieren zwei Sequenzen--Sie sind nicht vom gleichen Typ oder Form.poList2
. Dann, die Abfrage-Sequenzen müssen die gleiche "Form" - und so sollte unionable.Ersten, erstellen Sie eine ViewModel-so:
Dann verwenden Sie es in Ihrem code wie folgt: