& # 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的总秒数?
谢谢
尝试使用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,你只能执行可以由你使用的数据库管理系统执行的操作。
您需要从数据库中获取所需的信息,并从该查询中创建一个列表,然后将其称为"对象链接",您将能够执行所需的操作。