1

我有,我认为这是一个非常直接的查询。

在普通的 Sql 中,这将显示为:

SELECT    [column names]
FROM      agentscheduledetail
WHERE     (date = '2012-07-04') AND 
           (
            exception = 'Break (No Sign Off)' OR
            exception = 'Break' OR
            exception = 'Break (Signed Out)'
           )

这将返回大约 900 条记录。

但是,当我尝试将其输入我的控制器时,我最终得到了大约 300,000 条记录 - 所以我认为我的 AND 和 OR 不起作用。我已经尝试过 Linqer,但无法让它工作(我知道这可能不是实际的 LINQ,而是 VS 中的等效查询 - 如果有 linq 版本......如果可能的)。

我的控制器查询是:

        var dte = DateTime.Today;

        return View(db.agentscheduledetails.Where
           (
            d => d.date == dte && d.agentName.StartsWith("ta") && 
             (
              d.exception == "Break (No Sign Off)" || 
              d.exception == "Break" || 
              d.exception == "Break (Signed Out)"
             )
            ).ToList()
           );

任何人都可以 a) 让我知道我的 && || 哪里出了问题 (和/或),或b)有没有一种方法可以单步执行VS中的代码,以查看上述查询在普通SQL中的含义,以便我可以尝试找出哪里出错了?

谢谢你的帮助,

标记

4

2 回答 2

1

以下可能是您尝试执行的操作的简化版本,与比较代理名称的 SQL 相比,您的 LINQ 还包含一条附加语句?

var currentDate = DateTime.Today;
var exceptionTypes = new List<string>() { "Break (No Sign Off)", 
                                          "Break", "Break (Signed Out)" };

db.agentscheduledetails.Where(d => d.date == currentDate && 
                                           exceptionTypes.Contains(d.exception));

您可以尝试的一件事是获取 LinqPad 的副本,这将使您可以针对数据库运行 LINQ 语句,并向您显示生成的 SQL 语句是什么。

于 2012-07-04T08:50:08.993 回答
0

除了别的,

    d.agentName.StartsWith("ta")

没有出现在你原来的sql...?

于 2012-07-04T08:49:40.107 回答