gpt4 book ai didi

c# - 将嵌套 SQL 查询转换为 LINQ 查询

转载 作者:行者123 更新时间:2023-11-30 16:45:31 26 4
gpt4 key购买 nike

有没有办法将下面的SQL查询准确地转换成LINQ

SELECT * FROM T1 
WHERE ColumnA IN (
SELECT FkColumnA FROM T2
WHERE FkColumnB IN (
SELECT ColumnB FROM T3
WHERE FkColumnC IN (
SELECT ColumnC FROM T4
WHERE FkColumnD = 1)) AND FkColumnE is null AND ColumnF = 0)

此外,是否有人知道任何文档,其中列出了将 SQL 查询转换为 LINQ 的任何逻辑或指南?

编辑 1:

上面使用 JOINS 的等价物如下:

select * from T1  a
inner join T2 b on a.FKColumnA = b.ColumnA
inner join T3 c on c.ColumnB = b.FkColumnB
inner join T4 d on d.ColumnC = c.FkColumnC
where a.FkColumnD is null and a.ColumnE = 0
and d.ColumnC = 1

它等效于 LINQ 查询

var linq = from q in context.T1
join r in context.T2
on q.FKColumnA equals r.ColumnA
join s in context.T3
on r.FkColumnB equals s.ColumnB
join t in context.T4
on s.FkColumnC equals t.ColumnC
where q.FkColumnD != null && q.ColumnE == false && t.ColumnC == 56816
select q.FkColumnF;

但是在 LINQ 中使用 JOINS 看起来更简单也更好。因此,这个问题仅供我了解。

最佳答案

从字面上翻译您的查询,我们得到以下 LINQ 语句:

var results = table1.Where(t1 => table2.Where(
t2 =>
table3.Where(
t3 =>
table4.Where(t4 => t4.FkColumnD == 1)
.Select(t4 => t4.ColumnC)
.Contains(t3.FkColumnC))
.Select(t3 => t3.ColumnB)
.Contains(t2.FkColumnB) && !t2.FkColumnE.HasValue && t2.ColumnF == 0)
.Select(t2 => t2.FkColumnA)
.Contains(t1.ColumnA));

这导致 IEnumerable<T1>您可以根据需要使用。

据我所知,没有关于转换语法的“文档”,作为开发人员,这是您的工作。但是,我个人发现LINQPad在构造 LINQ 语句时非常有用。

关于c# - 将嵌套 SQL 查询转换为 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976508/

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