Я бы хотел перевести следующий оператор 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
Запрос находится над представлением, в котором содержатся записи о "понравившихся" объектах.Поскольку объекты могут публиковаться в нескольких местах, а представление было настроено на фильтрацию для определенного места, требуется отдельная группа перед тем, как сгруппировать записи, чтобы выяснить количество просмотров (это причина дополнительного запроса для ссылки ""column).
Возможна ли вложенная инструкция SELECT в одной инструкции linq?
Внутренний запрос не вызывает проблем:
(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)