【问题标题】:How to select records which do not have rows with dates falling in the current week如何选择没有日期在本周的行的记录
【发布时间】:2015-07-02 10:16:04
【问题描述】:

我正在将 linq 查询转移到 ado 中,但似乎无法获得正确的语法来实现我想要的结果。


我有一个简单的设置,用户有相关的操作。我想选择没有关注我并且本周没有存档操作记录的用户。

这是我尝试转换的等效 linq 查询(注意这些是不同的表名,但具有相同的确切架构)

var users = context.IG_Cats_Users.Where(p => p.IsFollowing == false
                                                             & p.IsRequested == false &
                                                             !p.IG_Cat_Actions.Any(
                                                                 a =>
                                                                     DbFunctions.TruncateTime(a.Date) >=
                                                                     first.Date
                                                                     &
                                                                     DbFunctions.TruncateTime(a.Date) <=
                                                                     last.Date))
                    .Take(numOfUsers);  

这是我目前的查询

 var qry = "SELECT Id FROM Users "
            + "INNER JOIN Actions ON Users.Id = Actions.UserId "
            + "WHERE Users.IsFollowing = 0 AND Users.IsRequested = 0 AND IF NOT EXISTS ("  

我想我会尝试IF NOT EXISTS EXISTS
但是对于每个示例,他们都会在子句中运行一个子查询。我想确保正在搜索的任何操作都与查询的第一部分中的用户相关联,但我不知道如何在 TSQL 中解决它

编辑
关于日期:我已经在传递给函数的代码中创建了两个日期值。它是在 C# 中计算的

【问题讨论】:

    标签: sql linq tsql


    【解决方案1】:

    类似这样的:

    SELECT u.Id
    FROM Users u
    WHERE u.IsFollowing = 0 AND u.IsRequested = 0 AND
          NOT EXISTS (SELECT 1
                      FROM Actions a
                      WHERE u.Id = a.UserId
                     );
    

    【讨论】:

    • 好的,那么关联这两个查询的方法是给实际表起别名。明白了!
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多