2010-08-20 55 views
1

我想下面的SQL語句轉換成LINQ查詢:Linq查詢與分組和獨特的嵌套select語句

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 Server:

(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這樣的事情... – 2010-08-20 14:51:39

+0

我也是...... 我發現的東西,幾乎工作,但產生太多的SQL查詢。 – Nina 2010-08-20 15:06:28

回答

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 2010-08-20 15:29:27

+0

我懷疑如果你刪除了'MoreLink = ...'子查詢,它可以在一個查詢中完成。 – 2010-08-20 15:38:33