【问题标题】:Linq - How to do two select queries? [duplicate]Linq - 如何进行两个选择查询? [复制]
【发布时间】:2013-03-22 07:28:31
【问题描述】:
SELECT userid FROM userTable 
WHERE userid in (select writeuserid FROM boardTable)

C# LINQ 表达式,如何使用查询?

我一直在使用 EF4。 userTable、boardTable 连接到 DbContext。

【问题讨论】:

标签: c# linq


【解决方案1】:

为什么不使用两个不同的 LINQ 查询,以便您的内部查询不会针对外部查询的每次迭代执行。

var query1 = (from t in dbContext.boardTable
            select t.writeuserid).ToArray();

var query2 = from r in dbContext.userTable
             where query1.Contains(r.userid)
             select r.userid;

如果你的情况和问题一样简单,那么你会导致join in linq

【讨论】:

  • +1 只是为了解决这个问题比 OP 付出更多的努力..
  • 感谢您的回答。
  • 如果数据量非常大,使用 ToArray() 可能会有点危险,因为它会导致 EF 实现整个数组。连接可能更适合该目的。
  • @PabloRomeo,实际上我不确定 OP 的确切要求,所以向他/她提供了上述选项,还在 linq 中添加了连接链接
【解决方案2】:

这里假设你使用了Entity FrameWork,那么你可以使用Join得到结果,下面是使用lambda表达式:

var result = dbContext.Users.Join(dbContext.Boards, 
                                  user => user.UserId, 
                                  board => board.WriteUserId,
                                  (u, b) => u.UserId);

【讨论】:

  • 稍微解释一下对 OP、IMO 来说会很棒..
【解决方案3】:

为什么不使用连接?

var result = (from u in dbcontext.userTable 
join u1 in dbcontext.boardTable on u.userid equals u1.writeuserid
select u.userid).FirstOrDefault();

if (result != null)
 // do anything else
else
 // user not exists

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多