【问题标题】:Translating WHERE NOT IN or LEFT JOIN into LINQ将 WHERE NOT IN 或 LEFT JOIN 翻译成 LINQ
【发布时间】:2011-12-02 17:09:59
【问题描述】:

我首先使用 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();

【问题讨论】:

    标签: c# linq ef-code-first


    【解决方案1】:

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

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

    【讨论】:

    • 确实WHERE NOT (EXISTS(SELECT null as [EMPTY] FROM TABLE WHERE t1.id = t0.id))
    • @MikeStewart 在成本方面应该差不多,所以我想这很好。感谢您查看查询生成的 SQL!
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多