I am not interested in the contents of a row, I just want to know if a row exists. The Name
column is a primary key, so there will either be 0 or 1 matching rows. Currently, I am using:
if ((from u in dc.Users where u.Name == name select u).Count() > 0)
// row exists
else
// row doesn't exist
While the above works, it does a lot of unnecessary work by selecting all the contents of the row (if it exists). Does the following create a faster query:
if (dc.Users.Where(u => u.Name == name).Any())
...or is there an even faster query?
The Count()
approach may do extra work, as (in TSQL) EXISTS
or TOP 1
are often much quicker; the db can optimise "is there at least one row". Personally, I would use the any/predicate overload:
if (dc.Users.Any(u => u.Name == name)) {...}
Of course, you can compare what each one does by watching the TSQL:
dc.Log = Console.Out;