2016-10-21 4 views
1

Ist es irgendwie möglich, die Variante abc zu verwenden, ohne Convert zweimal aufrufen zu müssen? Ich meine wie def, aber ohne eine Sekunde von?LINQ: Wo auf ausgewählten Ergebnis?

Etwas wie:

var desired = (from x in AnswerRecords 
       select Converter(x) as bla 
       where bla != null 
       ).ToList(); 
+1

wie 95% des Inhalts dieser Frage hat * nichts * mit dem zu tun, was Sie fragen. Sie sollten nicht große Mengen an völlig irrelevantem Code einschließen. – Servy

Antwort

3

Ihr Fall passt genau zur Verwendung des Schlüsselwortes let.

es Verwenden Sie das Ergebnis der Converter zu speichern und dann überprüfen:

var result = from item in AnswerRecords 
      let converted = Converter(item) 
      where converted != null 
      select converted; 
0

Wenn Sie die verkettete Methodenaufruf Syntax verwenden Sie einfach Anrufe Kette ...

AnswerRecords.Select(x => Converter(x)).Where(x => x != null).ToList(); 

Und noch kürzer:

AnswerRecords.Select(Converter).Where(x => x != null).ToList(); 

bearbeiten :

var desired = (
     from y in (
      from x in AnswerRecords 
      select Converter(x) 
     ) 
     where y != null 
     select y 
    ).ToList(); 
+0

Nein, ich möchte die sql-Stil Linq, nicht verkettete Methode Aufrufsyntax. – User1

+0

@ User1 Bearbeitet ... aber es ist nicht lesbarer IMHO. – Lucero

+0

das habe ich schon. Ich werde mich damit zufrieden geben (aus x in AnswerRecords wählen Sie Converter (x)) .Where (x => x! = Null) .ToList(); – User1