2014-09-25 2 views
0

어떻게이 쿼리를 linq으로 변환 할 수 있습니까?내부, 왼쪽 및 중첩 선택이있는 SQL 쿼리를 LINQ로 변환

SELECT p.PostID, p.PostText, p.PublishDate, u.Name 
FROM AspNetUsers u INNER JOIN Posts p ON u.Id = p.PostUserID LEFT JOIN Reposts r ON p.PostID = r.PostID 
WHERE p.PostUserID = 'id' 
OR p.PostUserID IN (SELECT FollowingUserID FROM Friends WHERE FollowerUserID = 'id' AND isUnfollow = 0) 
OR p.PostID in (SELECT PostID FROM Reposts WHERE RepostUserID = 'id' OR RepostUserID IN (SELECT FollowingUserID FROM Friends WHERE FollowerUserID = 'id' AND isUnfollow = 0)) 
ORDER BY p.PostUserID 
+0

SQL 쿼리가 잘 작동하고 필요한 결과를 제공합니다. –

답변

0

이 방법이 유용합니까?

var results = from u in AspNetUsers 
       join p in Posts on u.Id equals p.PostUserID 
       join r in Reposts on p.PostId equals r.PostId into records 
       from record in records.DefaultIfEmpty() 
       where p.PostUserID == "id" 
       || (from friend in Friends 
        where friend.FollowerUserID == "id" 
         && friend.isUnfollow == 0 
        select friend.FollowingUserID 
        ).Contains(p.PostUserID) 
       || (from r2 in Reposts 
        where r2.RepostUserID == "id" 
         || (from friend2 in Friends 
          where friend2.FollowerUserID == "id" 
           && friend2.isUnfollow == 0 
          select friend2.FollowingUserID 
          ).Contains(r2.RepostUserID) 
        select r2.PostID 
        ).Contains(p.PostID) 
       orderby p.PostUserID ascending 
       select p.PostID, p.PostText, p.PublishDate, u.Name; 
+0

지원과 시간을 내 주셔서 감사합니다. 그것은 나에게 오류를 준다) .Contains (p.PostID) : 쿼리 본문은 select 절이나 그룹 절로 끝나야한다. –

+0

정말 고마워! –