Объединить два подсчитывающих запроса в один логический запрос - PullRequest
3 голосов
/ 27 апреля 2009

Я не могу придумать хороший способ написать это как один запрос.

int count1 = query1.Count();
int count2 = query2.Count();

return count1 > count2;

Обратите внимание, что меня интересуют способы написания одиночного запроса, который возвращает логическое значение и оценивается один раз на сервере.

Обратите внимание, что мне интересны способы написания этого с помощью LINQ, а не с SQL.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2009

Попробуйте

return query1.Count() > query2.Count();

Не стоит пытаться выполнить два несвязанных запроса в одном и том же вызове сервера, но вот оно:

SELECT CASE WHEN (SELECT COUNT(*) FROM Products) 
        > (SELECT COUNT(*) FROM Orders) 
            THEN CAST(1 as bit) 
            ELSE CAST(0 AS BIT)

Однако я серьезно сомневаюсь, что вы можете заставить LINQ создать такой запрос. Вместо этого вам придется вызывать хранимую процедуру.

0 голосов
/ 27 апреля 2009

Что не так с

var result= query1.Count() > query2.Count();

return result; // result is of type bool

РЕДАКТИРОВАТЬ:

Если вы действительно хотите выполнить его как один запрос на сервере, вы можете использовать DataContext.ExecuteQuery для выполнения динамического запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...