Ich bin neu in LINQ und möchte wissen, wie mehrere where-Klauseln ausgeführt werden. Folgendes möchte ich erreichen: Datensätze zurückgeben, indem bestimmte Benutzernamen herausgefiltert werden. Ich habe den folgenden Code ausprobiert, aber nicht wie erwartet funktioniert.
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where ((r.Field<string>("UserName") != "XXXX") || (r.Field<string>("UserName") != "XXXX"))
select r;
DataTable newDT = query.CopyToDataTable();
Danke für die Hilfe im Voraus !!!
quelle
@Das Ö
Der LINQ-Übersetzer ist intelligent genug, um Folgendes auszuführen:
.Where(r => r.UserName !="XXXX" && r.UsernName !="YYYY")
Ich habe dies in LinqPad getestet ==> JA, der Linq-Übersetzer ist klug genug :))
quelle
@ Jon: Jon, sagst du mit mehreren where-Klauseln, z
var query = from r in tempData.AsEnumerable() where r.Field<string>("UserName") != "XXXX" where r.Field<string>("UserName") != "YYYY" select r;
ist restriktiver als zu verwenden
var query = from r in tempData.AsEnumerable() where r.Field<string>("UserName") != "XXXX" && r.Field<string>("UserName") != "YYYY" select r;
Ich denke, sie sind in Bezug auf das Ergebnis gleichwertig.
Ich habe jedoch nicht getestet, ob die Verwendung mehrerer, wo im ersten Beispiel Ursache in 2 Unterabfragen, dh
.Where(r=>r.UserName!="XXXX").Where(r=>r.UserName!="YYYY)
oder der LINQ-Übersetzer klug genug ist, um ausgeführt zu werden.Where(r=>r.UserName!="XXXX" && r.UsernName!="YYYY")
quelle
Sie können auch Bool-Methoden verwenden.
Abfrage:
DataTable tempData = (DataTable)grdUsageRecords.DataSource; var query = from r in tempData.AsEnumerable() where isValid(Field<string>("UserName"))// && otherMethod() && otherMethod2() select r; DataTable newDT = query.CopyToDataTable();
Methode:
bool isValid(string userName) { if(userName == "XXXX" || userName == "YYYY") return false; else return true; }
quelle