2014-09-25 67 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