LINQ mit Group By-und Having-Klausel mit Min(string)
Gibt es Beispiele mit Gruppe von - having count oder wählen Sie mindestens Datum mit linq auf dem web, aber ich konnte nicht finden eine Lösung für meine Frage. Und auch ich habe nicht eine erweiterte linq-verstehen-kombinieren Sie diese Lösungen, die ich bisher gefunden.
Ich habe eine SQL-Abfrage wie diese:
select client_id
from my_table /* Column1 : client_id, Column2 : _month */
group by client_id
having min(_month) = '2009-11'
Meine Frage ist: Wie konvertiere ich diese Abfrage in c# linq?.
So weit schrieb ich etwas davon, aber es gibt nicht, was ich habe:
var query = dataTable.AsEnumerable() //This is my_table
.GroupBy(c => c.Field<Int32>("client_id"))
.Select(g => new
{
g.Key,
minMonth = g.Min(c => c.Field<string>("_month"))
})
.Where(d => d.minMonth == "Some String like '2009-11'");
Es tatsächlich gibt mir das Ergebnis dieser SQL, die ich nicht brauchen:
select client_id, min(_month)
from my_table
where _month = '2009-11'
group by client_id
Hinweis: _month ist eine Zeichenkette, die formatiert ist, wie JJJJ-MM.
InformationsquelleAutor Barry Guvenkaya | 2014-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Den
having
- Klausel umgesetzt wird innerhalb derWhere
in diesem LINQ-Anweisung. Nach der Gruppierung durchclient_id
verwenden wirx.Min
zur Umsetzung dermin
Aggregatfunktion auf_month
, und verwenden Sie dann dieParseExact
Methode zu analysieren als ein Jahr-Monats-Kombination zu tun, der Vergleich.Aus der SQLFiddle zur Verfügung gestellt von OP, es gibt 4 Datensätze zurückgegeben. Ein demo mit identischen Daten und die obige Abfrage gibt auch die gleichen 4 Datensätze.
Warum zu analysieren linken datetime string aus anstatt bauen es direkt?
Fair genug, die getan werden kann, sowohl direkt als auch. Ich update meine Antwort zu gehören.
_month
ist ein string, von dem was ich verstehe, also, das muss analysiert werden.Vielen Dank für die schnelle Antwort und Erklärung. Obwohl es vielversprechend aussieht, nach dem kompilieren mit dieser Lösung erhalten Sie das gleiche Ergebnis mit meiner eigenen Lösung. Was ich erwarte ist das Ergebnis meiner ersten SQL-Schnipsel mit min(_month) = '2009-11' - Klausel.
Und es doesn ' T geben Sie? Was bekommen Sie, sobald Sie diese Abfrage ausführen? Hier ist eine demo von dem oben genannten: rextester.com/FZYOEQ94595 und hier ist ein demo von deiner SQL-Abfrage mit identischen Daten: rextester.com/JKE76750
InformationsquelleAutor shree.pat18