2014-01-17 2 views
0

я написал ниже заданного запроса в SQL Server 2008:Преобразование SQLSERVER запрос в LINQ

(SELECT p.postid, 
     p.title, 
     p.disabled, 
     l.locationname 
    FROM posts p 
     INNER JOIN categories c 
       ON p.categoryid = c.categoryid 
     INNER JOIN users u 
       ON p.userid = u.userid 
     INNER JOIN tags t 
       ON p.tagid = t.tagid 
     INNER JOIN locations l 
       ON p.locationid = l.locationid 
     LEFT JOIN postimages pm 
       ON p.postid = pm.postid 
WHERE p.categoryid = 1 
    GROUP BY p.postid, 
      p.title, 
      p.disabled, 
      l.locationname) 
ORDER BY p.postid DESC 

Я хочу написать приведенный выше запрос в LINQ.

Я попытался немного и в состоянии написать ниже запрос:

var objPosts = (from p in _dbcontext.Posts 
         join us in _dbcontext.Users on p.UserId equals us.UserId 
         join tag in _dbcontext.Tags on p.TagId equals tag.TagId 
         join cat in _dbcontext.Categories on p.CategoryId equals cat.CategoryId 
         join loc in _dbcontext.Locations on p.LocationId equals loc.LocationId 
         join img in _dbcontext.PostImages on p.PostId equals img.PostId into gj 
         from postimg in gj.DefaultIfEmpty() 

         where p.Disabled == false && p.CategoryId == userPost.CategoryId || p.UserId == userPost.UserId || p.TagId == userPost.TagId || p.LocationId == userPost.LocationId 

         orderby p.PostId descending 

         select new 
         { 
          PostId = p.PostId, 
          PostTitle = p.Title, 
          //ImageInfo = postimg.ImagePath, 
          //ThumbNailInfo = p.ThubNailInfo, 
          PostShortDescription = p.ShortDescription, 
          UserId = us.UserId, 
          UserName = us.Name, 
          TagId = tag.TagId, 
          TagTitle = tag.Title, 
          CategoryId = cat.CategoryId, 
          CategoryName = cat.CategoryName, 
          LocationId = loc.LocationId, 
          LocationName = loc.LocationName 
         }); 

Я не могу применить группу по логике в LINQ. Может ли кто-нибудь конвертировать мой SQL в LINQ. Благодаря

+0

У вас была попытка с группой в linq? если да, то какая ошибка его дает? –

ответ

0
group new { p, l } by new 
      { 
      p.postid, 
      p.title, 
      p.disabled, 
      l.locationname 
      } into g 
    orderby g.Key.PostId descending 

select new 
      { 
      g.key.postid, 
      g.key.title, 
      g.key.disabled, 
      g.key.locationname 

      } 
+0

Я использовал приведенную выше логику и получил заданную ошибку: LINQPad.User.Posts 'не содержит определения для «postid» и никакого метода расширения «postid», принимающего первый аргумент типа «LINQPad» .User.Posts "(нажмите F4, чтобы добавить ссылку на директиву или сборку) – user3124690

+0

Я просто хочу знать синтаксис использования группы по нескольким таблицам, остальное я сделаю сам. Итак, если вы можете сделать вышеупомянутый запрос SQL в LINQ, можете ли вы, пожалуйста, уточнить свой ответ более точно. – user3124690

+0

Наконец-то я получаю свой результат. Благодаря..:) – user3124690

0

Недостающая часть в запросе, что вы ничего не выбирая ...

Вы получили стыки ОК, левое внешнее соединение ОК, предикаты (где), упорядоченность, но не проекция, и ни одна группа от.

Ниже вы должны получить начал:

group p by p.PostId into pg 
select new {Post=p, Location=loc}; 

Это вернет вернуть коллекцию новых объектов, свойства почт и Location.

+0

Я обновил свой вопрос – user3124690

Смежные вопросы