2010-08-20 3 views
1

내가 LINQ 쿼리에 다음 SQL 문을 변환하고 싶습니다 :LINQ 쿼리는

select COUNT(*), itemid, globalid, title, preview, previewimage, previewimage_alt, link 
from (
     select distinct Id, itemid, globalid, title, preview, previewimage, previewimage_alt, 
       (select top 1 link from LikeCounter where GlobalId=x.GlobalId) as link 
     from [LikeCounter] x 
     where PortalId=1 and LanguageId=1 
    ) as t 
GROUP BY itemid, globalid, title, preview, previewimage, previewimage_alt, link 
ORDER BY COUNT(*) desc 

쿼리는 "좋아하고 개체의 기록을 보유하고보기 이상 ". 개체를 여러 위치에 게시 할 수 있고보기가 특정 위치에 대한 필터링을 허용하도록 설정 되었기 때문에보기 횟수를 찾기 위해 레코드를 그룹화하기 전에 별개가 필요합니다 (링크가 추가 쿼리되는 이유입니다). "열).

하나의 linq 문에서 중첩 된 SELECT 문이 가능합니까? ,

(from x in LikeCounter 
where x.PortalId==1 && x.LanguageId==1 
select new {x.Id, x.ItemId, x.GlobalId, x.LanguageId, x.Title, x.Preview, x.PreviewImage_alt, 
       Morelink=(from y in LikeCounter 
       where y.GlobalId==x.GlobalId 
       select y.Morelink).FirstOrDefault() 
      }).Distinct() 

그러나 서로 다른 레코드의 그룹과이를 확장 할 수있는 방법이 그 데이터베이스에 한 쿼리의 결과 :

는 내부 질의는 문제가 없다? 모든 입력에 미리

감사합니다 ...

니나

편집 :

다음 쿼리 거의 내가 원하는 반환 -하지만 SQL 서버에 여러 쿼리를 생성합니다

(from y in 
((from x in LikeCounter 
where x.PortalId==1 && x.LanguageId==1 
select new {x.Id, x.ItemId, x.GlobalId, x.LanguageId, x.Title, x.Preview, x.PreviewImage_alt, 
       Link=(from y in Xparo_LikeCounter 
       where y.GlobalId==x.GlobalId 
       select y.Link).FirstOrDefault() 
      }).Distinct()) 
group y by y.GlobalId into grp 
select new {Data=grp, Count= grp.Count()}).OrderByDescending (x => x.Count) 
+0

내가 이런 것들에 대한 LINQPad.exe를 사용하여 ... –

+0

그래서 내가 ... 내가 거의 작동하는 무언가를 발견 할 걸리지 만 너무 많은 SQL 쿼리를 생성 얼마나 많은 쿼리 아무 생각이 없습니다. . – Nina

답변

0

나는 아래에서 작동한다고 생각하지만 실제로 테스트 할 수는 없다. 이 중

from subq in (from x in LikeCounter 
       where x.PortalId==1 && x.LanguageId==1 
       select new {x.Id, x.ItemId, x.GlobalId, x.LanguageId, x.Title, x.Preview, x.PreviewImage_alt, 
       Morelink=(from y in LikeCounter 
       where y.GlobalId==x.GlobalId 
       select y.Morelink).FirstOrDefault() 
       }).Distinct() 
group subq by new {TheCount = subq.Id.Count(), subq.Id, subq.ItemId, subq.GlobalId, subq.LanguageId, subq.Title, subq.Preview, subq.PreviewImage_alt, subq.Morelink } into grouped 
order by grouped.TheCount descending; 
+0

고마워, 기본적으로 그것은 내 시도와 비슷하게 작동하지만 쿼리에서 반환 된 각 결과에 대해 데이터베이스에 쿼리를 수행합니다 ... 흠, 그래서 아마 where 절을받는 저장 프로 시저로 이동합니다. – Nina

+0

'MoreLink = ...'하위 쿼리를 제거하면 단일 쿼리에서이를 수행 할 수 있다고 생각합니다. –

관련 문제