2014-09-25 48 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查詢效果很好,它給出了所需的結果 – 2014-09-25 00:22:43

回答

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子句或group子句結尾 – 2014-10-12 08:08:18

+0

非常感謝! – 2014-10-12 08:47:48