Wie kann ich eine Bedingung basierend auf den abgefragten Daten in einer anonymen Klasse in LINQ zum Datensatz verwenden?

StackOverflow https://stackoverflow.com/questions/2365200

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!

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top