gpt4 book ai didi

c# - 无法将使用 'not in (subquery)' 的查询语法 LINQ 查询转换为方法语法

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

我有一个使用 query syntax 的工作 LINQ 查询,我正在修改以使用 method syntax 并且在弄清楚如何实现 SQL 而不是in (subquery)-like method syntax 版本中的语句。

有什么指点吗?谢谢!

查询语法 - 这有效:

Foo = await( 
from foo in _context.foo
where foo.pid == PId
&& !DraftStatusExceptionList.Contains(foo.Stat)
&& (foo.Csstat != "UNK" || !String.IsNullOrEmpty(foo.Csstat))

//Below is the segment that I cannot figure out how to convert to method syntax:
&& !(
from recursiveJoinFoo in _context.foo
where recursiveJoinFoo.pid == PId
select recursiveJoinFoo.fooId
).Contains(foo.fooId)

orderby foo.Sdate, foo.Sdate2, foo.recordlocator
select foo
).
ToListAsync();

方法语法:

Foo = await_context.foo
.Where(r => r.pid == PId)
.Where(r => !DraftStatusExceptionList.Contains(r.Stat))
.Where(r => r.Csstat != "UNK" || !String.IsNullOrEmpty(r.Csstat))

.Where(//cant figure out the not in (subquery) portion)

.ToListAsync()

最佳答案

您需要做的就是在您的子查询上调用.Contains 方法,就像在查询语法中一样:

Foo = await _context.foo
.Where(r => r.pid == PId)
.Where(r => !DraftStatusExceptionList.Contains(r.Stat))
.Where(r => r.Csstat != "UNK" || !String.IsNullOrEmpty(r.Csstat))
.Where(r => !_context.foo
.Where(rr => rr.pid == PId)
.Select(rr => rr.fooId)
.Contains(r.fooId))
.OrderBy(r => r.Sdate)
.ThenBy(r => r.Sdate2)
.ThenBy(r => r.recordlocator)
.ToListAsync();

在最后一个 Where 方法调用中,您从数据库中提取了一些符合条件的 fooIds 到一个新集合中,然后检查主集合的元素反对。

注意子查询中使用的新变量名rr,用于区分查询和子查询中的元素,以及.Contains方法结果的否定。

编辑:轻微的代码更正并添加订购方法调用。

关于c# - 无法将使用 'not in (subquery)' 的查询语法 LINQ 查询转换为方法语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49579012/

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