2011-10-19 14 views
28

Voglio solo sapere qual è il modo migliore per verificare se un risultato IQueryable non ha valori.Qual è il modo migliore per verificare Il set di risultati IQueryable è nullo

es. se abbiamo un metodo come

public static IQueryable<Table> DisplayAll() 
{ 
    var db = new DataContext(); 
    var list= from data in db.Table select data; 
    return list; 
} 

e poi facciamo qualcosa di simile

var list = DisplayAll(); 
if(list != null) 
{ 
    //do something --- in here even if the result set has no values it will 
    // go to this line. It just say `enumeration yielded no results` 
} 

ogni modo possibile per controllare il set di risultati ha contenuto o no ??

Grazie

risposta

62

list non sarà mai null con LINQ; rappresenterà semplicemente una "raccolta vuota", se necessario. Il modo per test è con il metodo Any estensione:

if (list.Any()) { 
    // list has at least one item 
} 
+0

abbastanza semplice. Grazie –

+0

Ma senza una lista() questo potrebbe essere molto costoso. –

+3

@HenkHolterman: perché? Scommetto che in questo particolare esempio, "Any()" risulterebbe in un "SELECT COUNT (*) ..." e un confronto tra interi. Anche se il percorso sciocco di iniziare a enumerare un set di risultati, come sarebbe 'ToList' essere più veloce? – Jon

1

Un'eccezione sarà generata se IQueryable yeilds alcun risultato. Io uso:

using System.Data.Entity; //for Async support in EF 
var tQ = await _tableRepository.DisplayAll(); 
try { return await tQ.ToListAsync(); } 
catch { return null; } 

per intercettare l'eccezione e restituire null; o una lista vuota, se si preferisce,

catch { return new List<Table>(); } 
-2

Ecco ciò che funziona per me:

public IQueryable SomeFunc() 
    { 
     IQueryable result = Repo.SomeLinqQuery(); 
     if (result.GetEnumerator().MoveNext() == false) 
     { 
      throw new Exception("Results empty"); 
     } 
     return result; 
    } 
+1

perché hai davvero bisogno di fare questo? –

+1

masturbazione cerebrale;) È affascinante quanto lontano si possa complessare una questione semplice. – Jerther

+1

Questa parte è buona però: result.GetEnumerator(). MoveNext() == false – cfnerd

Problemi correlati