【问题标题】:LINQ to SQL, using subquery with IN operatorLINQ to SQL,使用带有 IN 运算符的子查询
【发布时间】:2015-04-12 20:53:24
【问题描述】:

我是 LINQ to SQL 的初学者。我正在尝试在 LINQ 中使用带有 SQL IN 运算符的子查询。 我正在尝试将查询 friends_Afriends_B 作为子查询与 posts 查询中的 SQL IN 运算符集成:

where p.UserName IN (friends_A)
where p.UserName IN (friends_B)

我不在乎是内联子查询还是使用变量。

问题是:
如何将查询 friends_Afriends_B(内联或使用变量)与 SQL IN 运算符集成?

额外的问题:如何从工会订购 整个 结果(var posts): orderby p.DateAndTime?

using (FacebookDataEntities entities = new FacebookDataEntities())
{

    var friends_A = from f in entities.Friends
                   where f.Friend_A != User.Identity.Name
                   && f.Friend_B == User.Identity.Name
                   select f.Friend_A;

    var friends_B = from f in entities.Friends
                   where f.Friend_A == User.Identity.Name
                   && f.Friend_B != User.Identity.Name
                   select f.Friend_B;

   var posts = ((from p in entities.Posts
     where p.UserName.ToLower() == User.Identity.Name
     select new { p.UserName, p.DateAndTime, p.PostText })

     .Union(from p in entities.Posts
            where p.UserName IN (friends_A)
            select new { p.UserName, p.DateAndTime, p.PostText })

     .Union(from p in entities.Posts
            where p.UserName IN (friends_B)
            select new { p.UserName, p.DateAndTime, p.PostText }));

   ListViewPosts.DataSource = posts.ToList();
   ListViewPosts.DataBind();
}

【问题讨论】:

    标签: c# linq visual-studio linq-to-entities


    【解决方案1】:

    查看您的代码,我认为这就是您所需要的。通过这样做,您还可以避免工会。

    var friends_A = from f in entities.Friends
                       where f.Friend_A != User.Identity.Name
                       && f.Friend_B == User.Identity.Name
                       select f.Friend_A;
    
    var friends_B = from f in entities.Friends
                       where f.Friend_A == User.Identity.Name
                       && f.Friend_B != User.Identity.Name
                       select f.Friend_B;
    
    var posts = 
         from p in entities.Posts
         let userName = p.UserName.ToLower()
         where 
            userName == User.Identity.Name ||
            friends_A.Concat(friends_B).Contains(userName)
         orderby 
            p.DateAndTime
         select new 
         { 
            p.UserName, 
            p.DateAndTime, 
            p.PostText 
         };
    

    【讨论】:

      【解决方案2】:

      你能试试这个吗?

       .Union(from p in entities.Posts
              where friends_A.Any(f => f.Name == p.UserName)
              select new { p.UserName, p.DateAndTime, p.PostText })
      
       .Union(from p in entities.Posts
              where friends_B.Any(f => f.Name == p.UserName)
              select new { p.UserName, p.DateAndTime, p.PostText }));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-25
        • 2010-12-31
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多