2012-03-22 13 views
0

私が割り当てられたすべてのアイテムを持っていない部屋のリストをしたい二つのテーブルRoom_masterRoom_ItemLinqクエリを最適化するにはどうすればよいですか?

Room_Master => roomid - pk, roomname 

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

を持っています。

私は

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クエリは非常に正常に動作しているが、問題はそれということであると私のそれぞれのLINQクエリがある結果を得るために

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 

次のようにSQLクエリを書いています にデータを返すには時間がかかりすぎます。私はRoom_masterテーブルに6000レコードあり、Room_itemテーブルには約70000レコードあり、私のビューにデータを戻すのに約2分かかります...

Linqクエリを最適化してより高速に実行するにはどうしたらいいですか?

+0

を割り当てられたアイテムを持っていない部屋のIDのリストを与える必要がありますあなたのSQLクエリが項目が割り当てられていない部屋を返すので。 – ChrisWue

+1

シャウトする必要はありません! – Phil

答えて

1

完全にテストされていない:

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) 

はあなたに私はLINQクエリは、割り当てられた少なくとも一つのアイテムを持っている部屋のIDを返し、正しいコードを読めば

+0

すごくうまくいった、ありがとう@ChrisWue ... :) –

関連する問題