ich die folgende Linq-Abfrage haben, dieLINQ: Hilfe mit groupby, scheint nicht wie SQL zu arbeiten :-) Lässt mich nur .Key und nichts anderes?
gruppiertvar results = from c in C
join h in h on c.Code equals
h.Code
join m in M on c.Code equals
m.Code
group c by c.Code into g
select
new
{
Group = g.Key,
Total = g.Count()
}
funktioniert gut, kehren 2 Datensätze, hat 1 Artikel insgesamt 4 Aufzeichnungen und der andere hat insgesamt 2. Ausgezeichnete seine gruppiert! aber ich gebe nur das gruppierte Feld zurück ...
Es gibt auch ein Feld namens tDate und auf der H-Tabelle und pCode auf der M-Tabelle.
jetzt habe ich versucht, meine Auswahl zu ändern, um zu sagen, aber linqpad beschwert sich über die Variablen m und h, weil ich vermute, sie sind nicht in der Gruppe enthalten von ... Aber das ist, wo ich verloren bin .. wie komme ich zurück mehr Felder in der Gruppe von. Natürlich sind sowohl pCode als auch tDate für jeden Datensatz innerhalb der Gruppe gleich ... daher sollte ich immer noch mit 2 Datensätzen, aber mit mehr Spalten enden.
select
new
{
Group = g.Key,
Total = g.Count(),
PCode = m.pCode,
TDate = h.tDate
}
Jeder Körper geben Sie mir eine helfende Hand ....
Vielen Dank im Voraus
Dank David! Ja, es funktioniert ein Vergnügen! Ich würde gerne wissen, welches der bessere Weg ist, dies zu tun - funktioniert wirklich gut, muss aber mehr Joins nach der ersten Gruppe enthalten. Oder Matoj, wo er vorgeschlagen hat, Max zu verwenden - was auch zu funktionieren scheint und weniger Code ist, aber die Implikationen der Verwendung von Max unsicher sind ... Warum Max verwenden, wenn es keinen Wert (mehrere) gibt, um das Maximum zu erhalten? – Martin
"Warum Max verwenden, wenn": Es gibt einen Plural durch Gruppierung etabliert. Eine Gruppe ist eine Sammlung, auch wenn es nur eine Sache gibt. –
"Was ist besser": Meine Abfrage hat eine Unterabfrage, seine Abfrage nicht. Meine Abfrage-Gruppen in einem Ziel-Zeilensatz, seine Abfrage-Gruppen in der Ergebnismenge. Aus Performance-Sicht ist seine Abfrage möglicherweise besser, da der erste Beitritt dem Optimierer die Wahlmöglichkeiten gibt, wo er anfangen soll. Aus Gründen der Korrektheit würde ich meine Abfrage bevorzugen, da die Gruppierung zuerst alle Fehler aufdeckt, die durch Verbinden mit nicht eindeutigen Datensätzen eingeführt werden (Gruppierung nach dem Verbinden blendet diese Fehler aus). –