什么是 lambda 等价于 SQL“in”语句

本文关键字:in 语句 SQL lambda 等价于 什么 | 更新日期: 2023-09-27 18:34:17

我无法找出这个sql语句的lambda等价物:

select * from Document
where Document.OrginalDocumentNumber
      in (select documentAccess.DocumentId from documentAccess where userId='1')

问题是文档和文档访问表彼此没有关系。
任何帮助将不胜感激。

什么是 lambda 等价于 SQL“in”语句

将 IN 替换为 EXISTS,你会得到以下内容:

from d in dbContext.Documents 
where dbContext.documentAccesses.Any(
    x=>x.DocumentId == d.OrginalDocumentNumber && x.userId == '1' )
select d

通常,如果您具有合理的导航属性,则可以直接避免join或子查询:

var documents = from documentAccess in contex.DocumentAccesses
                where documentAccess.UserId == 1
                select documentAccess.Document;

您可能需要对结果使用.Distinct(),具体取决于您的数据。

同样地:

var documents = contex.DocumentAccesses
                      .Where(access => access.UserId == 1)
                      .Select(access => access.Document);

更好的是,如果你已经在上下文中有一个User

var documents = currentUser.DocumentAccesses.Select(access => access.Document);