这个LINQ to SQL错误是什么意思?

Chr*_*ris 2 c# sql asp.net linq-to-sql

我出于某种原因在我的C#/ ASP.NET项目中遇到以下错误 - 可能是它与查询的SubString部分有关.但是,总是填充"SageJobNo"和"CutOffDate".

错误:

传递给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;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:错误发生在'foreach'行

Alb*_*nbo 7

如果你' '的字符串中没有任何内容IndexOf将返回-1并且子字符串将失败.

编辑
您可以通过检查字符串是否包含来保护" ".

IEnumerable<CcsVwICATimesheet> Timesheets = 
    (from s in SageDC.CcsVwICATimesheets 
        where 
        (
        (s.Contract_Number.Contains(" ") && s.Contract_Number.Substring(0, s.Contract_Number.IndexOf(" ")) == SageJobNo)
        ||
        (!s.Contract_Number.Contains(" ") && s.Contract_Number == SageJobNo)
        )
        && s.Timesheet_Date <= CutOffDate select s);
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢可以使用的三元运算符.

如果您使用Linq2Objects,则可以使用s.Contract_Number.Split().First(),但LINQ无法将其转换为SQL.