我有,我认为这是一个非常简单的查询。
在普通的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中转换成什么,这样我就可以试着弄明白我哪里出错?
感谢您的帮助,
标记
答案 0 :(得分:1)
以下可能是您尝试执行的操作的简化版本,您的LINQ还包含与比较代理名称的SQL相比的附加语句吗?
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语句是什么。
答案 1 :(得分:0)
除此之外,
d.agentName.StartsWith("ta")
没有出现在您的原始sql中??