可以任何人帮我转换这个SQL查询到linq

时间:2016-08-06 22:51:35

标签: sql-server asp.net-mvc linq

我需要将此SQL查询转换为链接:

"Select * FROM [Register] 
 where RegisterId IN (SELECT MyId 
                      FROM Friends 
                      WHERE FriendId='" + Session["CurrentProfileId"] + "' 
                      AND Status=1 

                      UNION 

                      SELECT FriendId 
                      FROM Friends 
                      WHERE MyId='" + Session["CurrentProfileId"] + "' 
                      AND Status=1) ";

可能看起来像这样?但这是错误的并且有错误

(from u in db.Register
 where RegisterId).Contains
        (from f in db.Freinds
         where f.MyId == Id && m.Status == 1
         select new { m.MyId })
        .Union(from m in db.Freinds
               where f.FreindId == Id && m.Status == 1
               select new { m.CreateDate } ));

1 个答案:

答案 0 :(得分:1)

上面的linq有一些问题,这里有几个:

  1. Union的查询中,您选择CreateDate,而在顶部则选择MyId。我假设您打算选择FreindId
  2. 在这两个查询中,您使用该字段创建一个匿名类实例,然后将其与RegisterId进行比较,该guid可能是string / int / Contains - 但肯定不是你刚才创造的类型。
  3. 您使用的var idsCollection = ((from f in db.Freinds where f.StatusId == 1 && f.MyId == Id select f.MyId) .Union(from m in db.Friends where m.StatusId == 1 && f.FreindId == Id select m.FriendId)).ToList(); var result = (from u in db.Register where idsCollection.Contains(u.RegisterId) select u).ToList(); 方法错误。 Linq语法可以类似于sql,但它不一样。点击此处查看Contains
  4. 正确的Linq方式是:

    .ToList()

    请注意.ToList()不是必须的,这只是为了便于调试。有关此{{1}}和Linq的详细信息,请参阅MSDN