C# 这个LINQ到SQL错误意味着什么?

C# 这个LINQ到SQL错误意味着什么?,c#,asp.net,sql,linq-to-sql,C#,Asp.net,Sql,Linq To Sql,由于某种原因,我在C#/ASP.NET项目中遇到以下错误-可能与查询的子字符串部分有关。但是,“SageJobNo”和“截止日期”始终填充 错误: 传递给LEFT或SUBSTRING函数的长度参数无效 代码如下: IEnumerable<CcsVwICATimesheet> Timesheets = (from s in SageDC.CcsVwICATimesheets where s.Contract_Number.Substring(0, s.Contract_Number.

由于某种原因,我在C#/ASP.NET项目中遇到以下错误-可能与查询的子字符串部分有关。但是,“SageJobNo”和“截止日期”始终填充

错误:

传递给LEFT或SUBSTRING函数的长度参数无效

代码如下:

 IEnumerable<CcsVwICATimesheet> Timesheets = (from s in SageDC.CcsVwICATimesheets where s.Contract_Number.Substring(0, s.Contract_Number.IndexOf(" ")) == SageJobNo && s.Timesheet_Date <= CutOffDate select s);

    foreach (CcsVwICATimesheet Timesheet in Timesheets)
    {
         LabourCosts += (double)Timesheet.Cost_Value;
    }

IEnumerable Timesheets=(从SageDC.ccsvwicatimeets中的s开始,其中s.Contract\u Number.Substring(0,s.Contract\u Number.IndexOf(“”))==SageJobNo和s.Timesheet\u Date如果字符串中没有任何
,则返回-1,子字符串将失败

编辑
您可以通过检查字符串是否包含
”来进行保护

IEnumerable时间表=
(来自SageDC.ccsvwicatimeets中的s)
哪里
(
(s.Contract\u Number.包含(“”)和s.Contract\u Number.子字符串(0,s.Contract\u Number.IndexOf(“”)=SageJobNo)
||
(!s.Contract\u Number.Contains(“”)&&s.Contract\u Number==SageJobNo)
)

&&s.Timesheet_Date我通过使用固定长度的子字符串解决了这个问题

IEnumerable<CcsVwICAPurchase> Purchases = (from s in SageDC.CcsVwICAPurchases where s.Contract_Number.Substring(0, Global.SageJobNoLength).Trim() == SageJobNo && s.Line_Type == "Materials" && s.Document_Date <= CutOffDate select s);

IEnumerable Purchases=(从SageDC.ccsvwicapources中的s开始,其中s.Contract\u Number.Substring(0,Global.SageJobNoLength.Trim()==SageJobNo和s.Line\u Type==Materials)&&s.Document_Date错误是在执行LINQ查询时,您确定合同编号始终包含空格吗?啊,我明白了,有些合同编号中没有空格。有什么办法吗?@Chris,在使用IndexOf和Substring之前,您需要检查答案是否包含空格,请参阅更新的答案。
IEnumerable<CcsVwICAPurchase> Purchases = (from s in SageDC.CcsVwICAPurchases where s.Contract_Number.Substring(0, Global.SageJobNoLength).Trim() == SageJobNo && s.Line_Type == "Materials" && s.Document_Date <= CutOffDate select s);