2012-11-27 5 views
5

Wie fügt man einen Standardwert in die zurückgegebene Sammlung ein, wenn die where Bedingung keine Ergebnisse liefert?Standardwert für linq Element auswählen, wenn Abfrage nichts zurückgegeben hat

from i in data.collection 
where i.Type == type 
select i.Count 
+2

Warum benötigen Sie einen Standardartikel? Eine leere Sammlung ist hier sinnvoll. – Rawling

+0

Ich muss für jedes zurückgegebene leere Ergebnis '0' bekommen –

+0

Ich muss Rawling zustimmen ... eine Sequenz von Nullzählungen wäre der offensichtliche Kandidat hier, außer Typ macht es einzigartig in irgendeiner Weise –

Antwort

18

Verwenden Sie die Enumerable.DefaultIfEmpty Methode, dies zu tun.

Beispiel (in Methode Syntax, weil es IMHO weniger umständlich):

data.collection.Where(i => i.Type == type) 
       .DefaultIfEmpty(defaultObject) 
       .Select(i => i.Count); 
4

Sie suchen nach DefaultIfEmpty suchen.

var itemCounts = from i in data.collection 
       where i.Type == type 
       select i.Count; 

var itemCountsOrMinusOne = itemCounts.DefaultIfEmpty(-1); 

Die erste finden Sie die Artikel zählt geben, oder ein IEnumerable, die keine Elemente zurückgibt.

Die zweite gibt Ihnen dann die Artikelanzahl, oder eine IEnuemrable, die nur -1 zurückgibt.

8

Es gibt DefaultIfEmpty() Methode.

In der Methode Syntax, können Sie es wie folgt verwenden:

data.Collection 
    .Where(i => i.Type == type) 
    .DefaultIfEmpty(yourDefaultValue) 
    .Select(i => i.Count); 

Wenn der Where Filter keine Artikel zurückgibt, eine Ein-Punkt enumerable mit yourDefaultValue wird als Eingang für die Select Projektion verwendet.

Verwandte Themen