& # 39; TimeOfDay& # 39;在LINQ到实体中不支持查找LINQ 2 SQL中的总秒数

本文关键字:LINQ SQL 实体 TimeOfDay 不支持 查找 | 更新日期: 2023-09-27 18:14:15

当我做以下操作时:

[EdmFunction("Edm", "TruncateTime")]
public static DateTime? TruncateDateTime(DateTime? inputDate)
{
    return inputDate.HasValue ? inputDate.Value.Date : (DateTime?)null;
}
 [EdmFunction("Edm", "TotalSeconds")]
public static double? GetTotalSeconds(DateTime? inputDate)
{
    return inputDate.HasValue ? inputDate.Value.TimeOfDay.TotalSeconds: (double?)null;
}
var employeeSelection = (from c in MyContext.Employees.Where(c => c.From.HasValue && c.To.TimeOfDay.TotalSeconds != 0)
...
select new Employee
{

 To = c.To != DateTime.MinValue && c.To.TimeOfDay.TotalSeconds != 0 ? TruncateDateTime(c.To).Value :
              c.To != DateTime.MinValue && c.To.TimeOfDay.TotalSeconds == 0 ? c.From.Value.AddMinutes(30) :  DateTime.MinValue
}

我得到这个:

附加信息:指定的类型成员'TimeOfDay'不是LINQ对实体的支持。只有初始化式、实体成员和支持实体导航属性。

当我尝试这个时:

var employeeSelection = (from c in MyContext.Employees.Where(c => c.From.HasValue && GetTotalSeconds(c.To) != 0)
...
select new Employee
{

 To = c.To != DateTime.MinValue && GetTotalSeconds(c.To) != 0 ? TruncateDateTime(c.To).Value :
              c.To != DateTime.MinValue && GetTotalSeconds(c.To) == 0 ? c.From.Value.AddMinutes(30) :  DateTime.MinValue
}

我得到:

附加信息:指定的方法的系统。可为空的1[System.Double] GetTotalSeconds(System.Nullable 1[System.DateTime])''GetDateRangeMethod'不能被转换为对实体的LINQ存储表达式。

如何找到Linq到SQL的总秒数?

谢谢

& # 39; TimeOfDay& # 39;在LINQ到实体中不支持查找LINQ 2 SQL中的总秒数

尝试使用SqlFunctions.DatePart.

。而不是

var employeeSelection = (from c in MyContext.Employees
          .Where(c => c.From.HasValue && GetTotalSeconds(c.To) != 0)

试试

var employeeSelection = (from c in MyContext.Employees
          .Where(c => c.From.HasValue && SqlFunctions.DatePart("second", c.To) != 0)
为NetMage

var employeeSelection = (from c in MyContext.Employees
          .Where(c => c.From.HasValue && (SqlFunctions.DatePart("second", c.To) + (60 * SqlFunctions.DatePart("minute", c.To)) + (3600 * SqlFunctions.DatePart("hour", c.To))) != 0)

,

TotalSeconds = (SqlFunctions.)DatePart("second", c.To) + (60 * SqlFunctions。DatePart("minute", c.To)) + (3600 * SqlFunctions. DatePartDatePart("小时",令)))

查看LINQ-to-Entities的日期和时间规范函数,如果您不确定如何调用它们,请查看如何:调用规范函数

可用的方法应该能够解决当前数据库不支持当前使用的操作的问题。

如果你有一个Linq-To-Entities Query,你只能执行可以由你使用的数据库管理系统执行的操作。

您需要从数据库中获取所需的信息,并从该查询中创建一个列表,然后将其称为"对象链接",您将能够执行所需的操作。