gpt4 book ai didi

c# - Linq-to-sql 加入/在哪里?

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:33 26 4
gpt4 key购买 nike

我有以下表结构

用户编号

类型ID是 bool

用户类型用户身份类型

我想根据 id 和 isBool 选择所有 UserType。

我试过这个查询

var q = from usertype in usertypes
from type in types
where type.isBool == false
where userstypes.user == id
select usertype;

但这并没有像预期的那样工作。我的问题是:

  1. 为什么?
  2. 使用 join on 语法与 where、where 和 where cond1 && cond2 有什么区别吗?我的理解是查询优化器会进行优化。
  3. where cond1 == var1 && cond2 == var2 带括号和不带括号有区别吗?这似乎很奇怪,可以在没有括号的情况下构建它
  4. 在这种情况下我需要什么类型的查询?我可以看到我可以做一个子查询或使用一个组,但不能 100% 确定是否需要。一个例子可能会有所帮助。我认为在这种情况下可能需要子查询。

最佳答案

您的查询没有在任何公共(public)字段上连接这两个表:

var q = from u in usertypes
join t in types on u.typeid equals t.id
where t.isBool == false && usertypes.user == id
select u;

join 和 where 子句之间存在差异,具体取决于它们的使用方式。无论哪种方式,最好使用连接,因为 LINQ-to-SQL 将生成内部连接而不是 hash 交叉连接(然后根据 where 子句进行过滤)。

您不需要括号。不过,您可以包括它们,因为它们在某些情况下确实有助于提高可读性。

关于c# - Linq-to-sql 加入/在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com