Wie kann ich eine Bedingung basierend auf den abgefragten Daten in einer anonymen Klasse in LINQ zum Datensatz verwenden?
-
23-09-2019 - |
Frage
Ich kann dies tun, indem ich das Ergebnis einer vereinfachten Abfrage schleife:
var query = from myrecord in dt.AsEnumerable()
where myrecord.Field<string>("field1") == "value1" || myrecord.Field<string>("field1") == "value2"
select myrecord;
foreach(var myrecord in query)
{
//if value1, then "X"
//sum += field2
}
Aber ich möchte wissen, ob es in der LINQ -Anweisung möglich ist.
Anonyme Klasse mit zwei Mitgliedern: Name und Wert. Der Name ist "x" oder "y" abhängig von Feld1 und Wert ist die Summe aller Feldwerte für Datensätze, bei denen die Bedingungen erfüllt sind. Ich denke, ich muss die count () -Methode verwenden, aber ich bin mir nicht sicher, wie oder wo. Vielleicht muss ich "Gruppe" und "in" verwenden, um die Zählung aus einem temporären Tisch zu erhalten?
Wenn es Datensätze mit (field1 == "value1") gibt, ist die Zeichenfolge "x", sonst ist die Zeichenfolge "y".
var query = from table in dt.AsEnumerable()
where table.Field<string>("field1") == "value1" ||
table.Field<string>("field1") == "value2"
select new
{
Name = (condition ? "X" : "Y"),
Value = //sum all field2 values
};
Danke im Voraus!
Lösung
Sicher, Sie können, die folgende Beispiele funktioniert ähnlich
class Program
{
static void Main(string[] args)
{
List<Person> persons= new List<Person>();
var result = from p in persons
select new
{
Name = (s.IsMarried ? s.X : s.Y)
};
}
}
class Person
{
public bool IsMarried { get; set; }
public string X { get; set; }
public string Y { get; set; }
}
Andere Tipps
Sie verwenden nur die "Tabellenvariable", die Sie bereits haben.
var query = from table in dt.AsEnumerable()
where table.Field<string>("field1") == "value1" ||
table.Field<string>("field1") == "value2"
select new
{
Name = (table.whatever ? "X" : "Y"),
Value = table.something.Sum()
};
Sie können einfach die Summe der Tabelle erhalten, indem Sie dies tun
table.Sum(t => t.ValueToSum) //Or whatever sub-table you need to sum