2009-05-26 5 views
2

В ADO.Net/SQLClient я часто что-то вроде этого:Скалярная функция LinqToSql

SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234

... и стрелять с помощью ExecuteScalar вернуть значение счетчика - для простой проверки, если что-то существует.

Как бы это сделать, используя LinqToSql?

ответ

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

Вы также можете использовать Count().

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

Но это требует всегда пройти через все строки в то время как Any() может вернуться после первой совпадающей строки - так Any() может иметь более высокую производительность.

+0

Вы упускаете правую скобку в коде –

+0

Fixed ^^ (шум, чтобы получить по крайней мере 15 символов ... ^^) –

+0

Вам нужно двойной равных делать сравнения '' == – Mykroft

3

Помните, что Linq to Sql является отсроченным исполнением, что означает, что запрос выполняется только при доступе к коллекции. Поэтому:

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

Включите SELECT Count() на стороне SQL.

2

Если вы хотите, чтобы увидеть, если что-то существует вы можете использовать любую функцию:

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

или, если вы действительно хотите знать, что рассчитывать вы можете использовать функцию где и функцию подсчета:

context.SomeTable.Where(i=> i.SomeKey == 1234).Count(); 
+2

Вы можете переместить предикат из Where() в Count() и сохранить некоторую типизацию. –

+0

Хороший совет! Благодарю. – Mykroft

Смежные вопросы