gpt4 book ai didi

.net - Entity Framework 子查询

转载 作者:行者123 更新时间:2023-12-01 11:09:09 24 4
gpt4 key购买 nike

如何在 EF 中编写这样的子查询?

select * from table1 where col1 in (select col1 from table2 where col2 = 'xyz')

select * from table1 where col1 not in (select col1 from table2 where col2 = 'xyz')

我试过类似的东西

from t1 in table1
where (from t2 in table2 where col2 = 'xyz' select t2.col1).Contains(t1.col1)
select t1

from t1 in table1
where !(from t2 in table2 where col2 = 'xyz' select t2.col1).Contains(t1.col1)
select t1

这些查询在 LinqPad 或 Linq to Sql 上运行良好

最佳答案

这种类型的子查询可以扁平化为一个连接,这是我在这里选择的写法:

SQL 版本:

SELECT t1.col1, t1.col2, t1.col3, ...
FROM table1 t1
INNER JOIN table2 t2
ON t1.col1 = t2.col1
WHERE t2.col2 = 'xyz'

Linq 版本:

var query =
from t1 in context.Table1
where t1.AssociationToTable2.Col2 == "xyz"
select new { t1.Col1, t1.Col2, ... };

其中 AssociationToTable2 是关系属性 - 它会自动进行连接。或者,如果您没有恋爱关系:

var query =
from t1 in context.Table1
join t2 in context.Table2
on t1.Col1 equals t2.Col1
where t2.Col2 == "xyz"
select new { t1.Col1, t1.Col2, ... };

您可以针对 NOT IN 相应地调整这些,尽管我建议如果可以避免的话永远不要使用 NOT IN - 性能会下降并且几乎总是意味着设计错误。

如果您绝对必须以“IN”方式进行,我建议您查看 this question 中的答案。 .

关于.net - Entity Framework 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1991993/

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