如何执行 LINQ to Entities 查询,从现有结果集变量中提取值而不是针对数据库
How to execute a LINQ to Entities query, pulling values from an existing resultset variable instead of against the DB
为了提供一些上下文,我使用 jqGrid 在日期时间字段上执行服务器端搜索,t运行在服务器端设置时间部分,然后通过存储过程获取结果。这是使用 System.Dynamic.Linq 完成的,我根据这个问题 here 稍微修改了一下。我正在使用 EF6 Code First 方法。代码的相关部分如下所示:
//For matching date instead of datetime values
if (wc.Clause.Contains("Date"))
{
wc.Clause = wc.Clause.Replace("DeliveryDate", "DbFunctions.TruncateTime(DeliveryDate)");
}
results = dataFileDB.Database.SqlQuery<Document>("exec [dbo].[sp_getDocumentDetails]").AsQueryable().Where(wc.Clause, wc.FormatObjects);
我遇到的问题是因为查询是使用存储过程获取的,所以我在最后一行出现异常
System.NotSupportedException: This function can only be invoked from LINQ to Entities.
at System.Data.Entity.DbFunctions.TruncateTime(Nullable`1 dateValue)
在我使用 lambda 查询直接从实体本身获取并应用 where 子句过滤器的其他地方,过滤是正确完成的。
我试图做的(我不确定这是否可能但是...)是 运行 针对 results
变量的实体查询并将 where 子句应用于那个变量,但我没有运气。这是正确的方法还是我可以采取另一种方法?
提前致谢!
明白了...我把事情搞得太复杂了。
我只是在通过存储过程返回时将 DateTime
字段转换为 Date
字段。这样做不再需要我使用 DbFunctions.TruncateTime
方法,从而解决了我的问题。
希望这对其他人有帮助!
为了提供一些上下文,我使用 jqGrid 在日期时间字段上执行服务器端搜索,t运行在服务器端设置时间部分,然后通过存储过程获取结果。这是使用 System.Dynamic.Linq 完成的,我根据这个问题 here 稍微修改了一下。我正在使用 EF6 Code First 方法。代码的相关部分如下所示:
//For matching date instead of datetime values
if (wc.Clause.Contains("Date"))
{
wc.Clause = wc.Clause.Replace("DeliveryDate", "DbFunctions.TruncateTime(DeliveryDate)");
}
results = dataFileDB.Database.SqlQuery<Document>("exec [dbo].[sp_getDocumentDetails]").AsQueryable().Where(wc.Clause, wc.FormatObjects);
我遇到的问题是因为查询是使用存储过程获取的,所以我在最后一行出现异常
System.NotSupportedException: This function can only be invoked from LINQ to Entities. at System.Data.Entity.DbFunctions.TruncateTime(Nullable`1 dateValue)
在我使用 lambda 查询直接从实体本身获取并应用 where 子句过滤器的其他地方,过滤是正确完成的。
我试图做的(我不确定这是否可能但是...)是 运行 针对 results
变量的实体查询并将 where 子句应用于那个变量,但我没有运气。这是正确的方法还是我可以采取另一种方法?
提前致谢!
明白了...我把事情搞得太复杂了。
我只是在通过存储过程返回时将 DateTime
字段转换为 Date
字段。这样做不再需要我使用 DbFunctions.TruncateTime
方法,从而解决了我的问题。
希望这对其他人有帮助!