Как я могу оптимизировать мой запрос Linq? - PullRequest
0 голосов
/ 22 марта 2012

У меня две таблицы Room_master и Room_Item

Room_Master => roomid - pk, roomname

Room_Item   => roomiteid - pk, roomid - fk, itemid, quantity

Мне нужен список комнат, которым не назначены никакие предметы.

Я написал SQL-запрос, как показано ниже, чтобы получить результат

select * from room where roomid in 
(select roomid from (select SUM(quantity) as qty, roomid from Room_Item group by roomid )
as newtab where qty=0) order by roomid

Мой соответствующий запрос Linq выглядит следующим образом

var roomitem1 = from ri in objEntities.Room_Item
        group ri by ri.roomid into p 
                select new { roomid = p.Key, totalitem = p.Sum(row => row.quantity) };
var roomid  = roomitem1.Where(x => x.totalitem > 0).Select(x => x.roomid);

Запрос Linq работает очень хорошо, но проблема в том, что он занимает слишком много времени вернуть данные. У меня 6000 записей в таблице Room_master и около 70000 записей в таблице Room_item, и для возврата данных в мое представление требуется около 2 минут ...

Как мне оптимизировать мой запрос Linq, чтобы он работал быстрее?

1 Ответ

1 голос
/ 22 марта 2012

Полностью не проверено:

objEntities.Room_Item
    .GroupBy(ri => ri.RoomId)                 // group all items by room id
    .Where(g => g.Sum(r => r.quantity) == 0)  // where the total quantity of all items for that room id is 0
    .Select(g => g.Key)

Должен дать вам список идентификаторов номеров, у которых нет назначенных пунктов

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