44 votes

Quel est le meilleur moyen de vérifier que l'ensemble de résultats d'un IQueryable est nul ?

Je veux juste savoir quel est le meilleur moyen de vérifier si un IQueryable Le résultat n'a pas de valeur.

Par exemple, si nous avons une méthode comme

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

et ensuite on fait quelque chose comme ça

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`
}

Existe-t-il un moyen de vérifier si le jeu de résultats a du contenu ou non ?

Gracias

88voto

Jon Points 194296

list ne sera jamais null avec LINQ ; il représentera simplement une "collection vide" si nécessaire. La façon de tester est avec le Any méthode d'extension :

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

4voto

OzBob Points 64

Une exception sera levée si IQueryable ne donne aucun résultat. J'utilise :

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

pour piéger l'exception et renvoyer null ; ou une liste vide si vous préférez,

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

0voto

Dennis Guthrie Points 61

Voici ce qui fonctionne pour moi :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X