c# - 将 WHERE NOT IN 或 LEFT JOIN 翻译成 LINQ

标签 c# linq ef-code-first

我首先使用 EF 代码设置了以下域模型:

public class User
{
    public virtual int Id { get; set; }
    public virtual string Email { get; set; }
    public virtual ICollection<UserProcessed> UsersProcessed { get; set; }
}

public class UserProcessed
{
    public virtual int Id { get; set; }
    public virtual DateTime CreatedAt { get; set; }
    public virtual User user { get; set; }
}

我正在尝试将以下 T-SQL 查询转换为 LINQ,但我遇到了一些困难:

SELECT u.Email
FROM Users u LEFT JOIN UsersProcessed up ON u.Id = up.UserId
WHERE up.UserId IS NULL
AND u.CreatedAt BETWEEN '2011-12-01' AND '2011-12-01'

这将返回所有尚未处理的用户(UserId 不存在于 UsersProcessed 表中)。

IEnumerable<User> users = Database.Set<User>().Where(....).ToList();

最佳答案

当生成 SQL 时,这可能不会转换为完全相同的查询,但它应该可以解决问题:

IEnumerable<User> users = Database.Set<User>().Where(u => !u.UserProcessed.Any()).ToList();

关于c# - 将 WHERE NOT IN 或 LEFT JOIN 翻译成 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359984/

相关文章:

c# - 超时过期,优化查询

c# - 使用 EF Core 3.1 在 SQL Server 上生成不可为空的行版本

c# - 为什么结构中的字段会丢失其值,而同一类中的字段却不会?

c# - 将数组转换为 IEnumerable<T>

c# - QueryString 未正确解析

javascript - C# - MVC - JSON - 使用 ViewBag 将列表从服务器端返回到客户端

c# - linq:随机排序

linq - 以不同方式处理第一个 IEnumerable 项目的最优雅方式

entity-framework - Entity Framework 6,DbContext.Database.SqlQuery<int> 未提供转换为 ToList() 的选项

algorithm - 从 SHA-512 哈希生成的字符不会保存到数据库中