Linq-запрос для вложенного оператора select с группировкой и - PullRequest
1 голос
/ 20 августа 2010

Я бы хотел перевести следующий оператор 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)

1 Ответ

0 голосов
/ 20 августа 2010

Я думаю, что ниже должно работать, но я не могу проверить это.Не знаю, сколько запросов потребуется

1002 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...