2012-04-12 2 views
-2

Ich muss auswählen und foreach, aber es funktioniert nicht. Wie kann ich das machen?Auswählen und Foreach in DataSet mit LINQ und Lambda funktionieren nicht

Ds ds = new Ds(); //DataSet 
Ds.HousesRow houseRow= ds.House.NewHousesRow(); 

houseRow.color= "red"; 
houseRow.date= new DateTime(); 
houseRow.description= "ZZZ"; 

ds.Houses.AddHouseRow(houseRow); 

var lHouses= ds.Houses.Select(i => new { i.color, i.description}).OrderBy(i => i).Distinct(); 

foreach (Ds.HousesRow item in lHouses) 
{ 
     System.Diagnostics.Debug.Print("Color: " + item.color + "Description: " + item.description); 
} 

Tks

+1

Wie funktioniert es nicht? –

Antwort

0

Sie einen anonymen Typ erstellen: Select(i => new { i.color, i.description}).

Sie können diesen Typ nicht auf Ds.HousesRow im Foreach-Modus umwandeln.

Ihre Schleife ändern zu

foreach (var item in lHouses) 
{ 
     System.Diagnostics.Debug.Print("Color: " + item.color + "Description: " + item.description); 
} 

Und Sie werden den anonymen Typ in der Schleife werden.

0

2 Dinge:

  • Ich denke, mit Select() ist ein wenig überflüssig, da alles, was zu tun ist, um die Daten an die foreach gesendet zu begrenzen, die zumindest in diesem Fall geben würde nur eine sehr geringe Einsparungen im Gedächtnis mit dem, was Sie tun. Wenn Sie die gesamte Variable in, sagen wir, JSON ausgeben würden, wäre es dann vorteilhaft, die Datenmenge zu begrenzen.
  • Wie der andere Typ sagte, mit var in der foreach würden Sie den anonymen Typ verwenden, wenn Sie wollten. Meine persönliche Präferenz ist, dass ich versuche zu vermeiden, dass außer wenn die Serialisierung Dinge (und selbst dann ziehe ich Datacontracts tun, um Fehler zu vermeiden später, wenn ich ein Wort oder etwas falsch schreiben)

    Ds.HouseRow lHouses= ds.Houses.OrderBy(i => i.Description).Distinct(); 
    
    foreach (Ds.HouseRow item in lHouses) 
    { 
         System.Diagnostics.Debug.Print("Color: " + item.color + "Description: " + item.description); 
    } 
    

EDIT: Auch, Ihre Bestellung muss etwas sagen, um die Bestellung zu vergleichen. Ich habe nur eine Beschreibung gegeben.

+0

Also was genau wird 'OrderBy (i => i)' tun? – BrokenGlass

+0

Hoppla, das habe ich verpasst. Es sollte OrderBy (i => i.Description) oder etwas ähnliches sein, das ich denke. Ich habe nicht meine Windows-Maschine mit mir zu testen, um sicherzustellen, dass das funktioniert, aber es sieht so aus, als sollte es nach Beschreibung sortieren. –

+0

Nun, was soll Ihr Distinct() tun? Ich stelle mir vor, OP wollte verschiedene Farb- und Beschreibungspaare auswählen. Ihr Beispiel entfernt doppelte Einträge in der Liste, was sehr unterschiedlich ist. –