【发布时间】:2018-03-30 17:49:18
【问题描述】:
我有一个使用 query syntax 的有效 LINQ 查询,我正在修改以使用 method syntax,并且在弄清楚如何在 method syntax 版本中实现类似 SQL not in (subquery) 的语句时遇到困难。
任何指针?谢谢!
查询语法 - 有效:
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()
【问题讨论】:
-
鉴于您已经有了工作代码,与 SO 相比,这可能更适合 codereview,除非有特定原因您不能保持代码原样?
-
@user2366842 我认为它属于语法转换,而不是改进。在代码审查中,我会问
Contains的递归查询是否优于GroupBy/Count() == 1?