2010-08-20 78 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