Fonction Scalar dans LINQ to SQL
-
06-09-2019 - |
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?
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();