我现在彻底沮丧。我遇到了LINQ-To-SQL的问题。大约80%的时间,它工作的很好,我喜欢它。另外20%的时间,L2S创建的查询返回正确的数据,但实际从代码运行时,它不会返回任何内容。我即将把我的头发拉出来。我希望有人能看到一个问题或以前听说过这个。谷歌搜索没有什么回报。C# - Linq-To-SQL - 查询问题
这里是LINQ查询...
var query = from e in DataLayerGlobals.GetInstance().db.MILLERTIMECARDs
where e.deleted_by == -1
&& e.LNAME == lastName
&& e.FNAME == firstName
&& e.TIMECARDDATE == startDate.ToString("MM/dd/yyyy")
group e by e.LNAME into g
select new EmployeeHours
{
ContractHours = g.Sum(e => e.HRSCONTRACT),
MillerHours = g.Sum(e => e.HRSSHOWRAIN + e.HRSOTHER),
TravelHours = g.Sum(e => e.HRSTRAVEL)
};
这是生成的查询....
SELECT SUM([t0].[HRSCONTRACT]) AS [ContractHours],
SUM([t0].[HRSSHOWRAIN] + [t0].[HRSOTHER]) AS [MillerHours],
SUM([t0].[HRSTRAVEL]) AS [TravelHours]
FROM [dbo].[MILLERTIMECARD] AS [t0]
WHERE ([t0].[deleted_by] = @p0)
AND ([t0].[LNAME] = @p1)
AND ([t0].[FNAME] = @p2)
AND ([t0].[TIMECARDDATE] = @p3)
GROUP BY [t0].[LNAME]
现在,当我插上了完全相同的值的LINQ查询使用进入生成的查询,我得到正确的数据。当我让代码运行时,我什么也得不到。
任何想法?
TIMECARDDATE是一个字符串。是的,是的,我知道。我继承了这个数据库,并且改变它不是一个选项。 这可能是问题。它在日期为2009年10月19日时有效,但在日期为2009年5月10日时不起作用。这是SQL Server问题还是LINQ问题? – 2009-12-02 03:12:28
@ Eclipsed4utoo你对10/5/2009的失败以及db日期只是字符串的事实的评论让我认为你的格式字符串应该是“MM/d/yyyy”,而不是你的“10/5/2009 “而不是”10/05/2009“作为你当前的代码。 – imaginaryboy 2009-12-02 03:31:49
老兄......你太棒了。就是这样。我结束了使用“M/D/YYYY”,所以月份不会有领先的0,这似乎也导致了这个问题。 – 2009-12-02 03:49:23