【发布时间】:2018-04-04 22:43:04
【问题描述】:
我的查询如下所示:
using (var ctx = new PCLvsCompContext())
{
var brokerId = broker?.Id;
var symbolId = company?.Id;
var result = (from t in ctx.TradeHistoryJoineds
where t.TradeDate >= fromDate
&& t.TradeDate <= toDate
&& (brokerId == null || t.BrokerId == brokerId)
&& (symbolId == null || t.SymbolId == symbolId)
select t).OrderBy(x => x.TradeDate).ThenBy(x => x.BrokerName).ToList();
return result;
}
例如,我使用 fromDate March-01-2017 toDate March-31-2017 这样的日期运行此查询。然后,我在此查询生成的 SQL 分析器中捕获了生成的 sql,并在 SQL 管理工作室中运行它。输出与预期的一样,每个工作日,每家公司都有一些交易。该查询基于将所有日期转换为“日期时间”的视图,以便 excel 可以正确地将它们解析为日期。但是,当我在“返回结果”处设置断点并检查日期时,除 2 个日期外,所有日期均为 2017 年 3 月 1 日。这是不正确的,SQL 管理器中的查询结果显示了 3 月几乎每个工作日的交易(这是正确的)。
这里发生了什么?为什么 Linq 会失去理智?
【问题讨论】:
-
SQL 管理器中的查询和 linq 中的查询是否返回相同数量的结果?
-
你提到了 Excel,但你也提到了 SSMS;这里的后端是什么?您是否检查过您正在连接的地方认为您正在连接?除了一些非常特殊的例外,查询通常通过 ADO.NET 和 SSMS 做同样的事情。另外,你确定你不只是看第一场比赛吗?例如,我们会期望 March-1st 记录排在第一位(因为
OrderBy) -
toDate的值是多少? -
会不会 TradeDate 是 UTC 但 fromDate, toDate 是本地时间?您是否依赖从字符串到日期时间的转换?与您的操作系统相比,数据库的语言是什么?