2016-05-31 18 views
-2

Ich habe ein seltsames Problem mit einem anonymen Typ. Lässt Sprung direkt in meinen Code:Anonymous Typ nach Linq gebrochen wählen

var anon = new[] 
{ 
    new { Var1 = 20, Var2 = 40, Var3 = 70 }, 
    new { Var1 = 25, Var2 = 45, Var3 = 75 } 
}; 

// found should be of type { int Var1, int Var2, int Var3 } 
var found = anon.Select(x => x).Where(x => x.Var1 == 25); 

var test = found.Var1 // <-- not defined error here 

Ganz einfache Frage:
Warum kann ich Var1 zugreifen, nachdem ein Linq wählen verwenden?

Sorry für dieses Thema, könnte nicht eine bessere Beschreibung dafür denken.

+0

in dieser Situation Compiler muss eine Fehlermeldung generieren, die erklären, warum 'Var1' ist nicht verfügbar – ASh

+0

Dummer Fehler, den ich gemacht habe. Kann nicht gelöscht werden, weil es bereits Antworten gibt. – C4u

+0

found.FirstorDefault(). Var1 sollte Ihnen das erste Element aus der Liste bekommen. – Rangesh

Antwort

5

Da Where Sie IEnumerable<> zurückgibt, kein einzelnes Element. Sie können First oder FirstOrDefault verwenden, um das erste Element zu erhalten.

found.First().Var1 
+0

Oh lol ich bin dumm. Sicher, mehrere Ergebnisse möglich. >. <. Es tut mir Leid. – C4u

2

Where gibt ein IEnumerable und ist für die 0-n Ergebnissen verwendet.

Wenn Sie immer 1 Ergebnis haben, wollen Sie Single.

Wenn Sie 0-1 Ergebnisse haben, möchten Sie SingleOrDefault.

Wenn Sie 1-n Ergebnisse haben möchten, können Sie First.

Wenn Sie 0-n Ergebnisse wünschen, möchten Sie FirstOrDefault.

+0

Valentin war zuerst ich denke. Ich habe das trotzdem für die Bereitstellung der Details aufgewertet. Vielen Dank. – C4u

1

Ich habe keinen C# -Compiler auf dieser Maschine, aber wahrscheinlich ist es, weil ein Iterable des anonymen Typs gefunden wird. Verwenden Sie anon.Select(x => x).Where(x => x.Var1 == 25).First() oder . Auch, ich bin ziemlich sicher, dass Sie nicht brauchen, wählen Sie einfach anon.Where(x => x.Var1 == 25).First()