Question

Dans ADO.Net/SQLClient je souvent faire quelque chose comme ceci:

SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234

... et le feu à l'aide ExecuteScalar pour renvoyer la valeur de comptage -. Pour un contrôle simple si quelque chose existe

Comment puis-je faire la même chose en utilisant LinqToSql?

Était-ce utile?

La solution

if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
    DoStuff();
}

Vous pouvez également utiliser Count().

if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
    DoStuff();
}

Mais cela exige toujours de passer par toutes les lignes alors que Any() peut revenir après la première ligne correspondante -. Si Any() pourrait avoir une meilleure performance

Autres conseils

Rappelez-vous, à Sql est Linq exécution différée, ce qui signifie, la requête n'exécute réellement lorsque vous accédez à la collection. Par conséquent:

var q = (from p in db.SomeTable
        where p.SomeKey == 1234
        select p).Count();

va se transformer en un SELECT COUNT () sur le côté SQL des choses.

Si vous cherchez à voir si quelque chose existe, vous pouvez utiliser la toute fonction:

if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
    return true;
}

ou si vous voulez vraiment savoir ce compte vous pouvez utiliser la fonction où et la fonction de comptage:

context.SomeTable.Where(i=> i.SomeKey == 1234).Count();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top