2014-01-17 1 views
3

У меня есть несколько моделей (рестораны, магазины, продукты), и я хочу выбрать количество записей для нескольких моделей в одном запросе linq.Выберите количество записей из нескольких таблиц в одном запросе

Я знаю, как это должно быть в SQL, но я не знаю, как перевести его в LINQ:

select 
    (select count(*) from restaurants) as restaurantsCount, 
    (select count(*) from shops) as shopsCount, 
    (select count(*) from products) as productsCount 
from 
    dual 
+1

Вы можете использовать оператор LinQ 'Union' для объединения запроса sub в –

ответ

2

Учитывая dual является фиктивной таблицы с одной строкой:

var result = new 
{ 
    RestaurantsCount = context.Restaurants.Count(), 
    ShopsCount = context.Shops.Count(), 
    ProductsCount = context.Products.Count() 
}; 

одного запроса решение:

 var result = from dummyRow in new List<string> { "X" } 
        join product in context.products on 1 equals 1 into pg 
        join shop in context.shops on 1 equals 1 into sg 
        join restaurant in context.restaurants on 1 equals 1 into rg 
        select new 
        { 
         productsCount = pg.Count(), 
         shopsCount = sg.Count(), 
         restaurantsCount = rg.Count() 
        }; 
+0

В вашем случае будут выполнены три очереди, а не один. Каждый для каждого Count(). – alexmac

+0

@Alexander У вас есть то же самое в вашем 'SQL'. Если единственная проблема состоит в том, чтобы иметь * единственный запрос *, который фактически не меняет способ получения данных - я обновлю ответ. –

+0

Теперь это работает, спасибо – alexmac