2012-03-22 4 views
0

나는이 할당 된 모든 항목이없는 객실의 목록을 원하는 두 개의 테이블 Room_masterRoom_ItemLinq 쿼리를 어떻게 최적화 할 수 있습니까?

Room_Master => roomid - pk, roomname 

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

을 데.

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); 

을 다음과 같이 내가

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 쿼리는 결과를 얻기 위해 아래와 같이 SQL 쿼리를 작성했습니다

는 점이다 에 너무 오랜 시간이 걸리므로 데이터를 반환하십시오. 나는 Room_master 테이블 6000 개 기록과 Room_item 테이블에 약 70,000 기록을 가지고 있고 그것이 더 빨리 실행되도록

은 어떻게 LINQ 쿼리를 최적화 할 수 있습니다 ... 내보기로 다시 데이터를 반환 약 2 분 정도 소요?

+0

할당 된 항목이없는 방 ID의 목록을 제공해야 다음 LINQ 쿼리는 적어도 하나 개의 항목이 위치를 할당 한 방 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) 

당신에게 내가 당신의 코드가 올바른 읽으면

+0

잘 했어, 고마워. @ChrisWue ... :) –

관련 문제