LINQ to Entities无法识别方法ToDateTime(System.String)。

4
我需要使用“转换为日期时间”方法来将日期时间与参考月份和年份进行比较,如下所示。
var res =  db.Table1
//other tables, and where conditions
.Select(x => new MyObj
{
      //...
      Imp = x.MyTable.FirstOrDefault(y => y.date_val >= System.Data.Entity.DbFunctions.AddMonths(Convert.ToDateTime("01/" + x.month + "/" + x.year), 1))).Description
})

我知道在sql中提供程序不能翻译Convert.ToDateTime,我需要一个想法来执行这个查询。
更新:在进行转换之前,我不会将查询实体化,因为这显然意味着获取所有记录。

2
Convert.ToDateTime 无法转换为 T-SQL,Linq to Entities 无法识别它。请参考此答案:http://stackoverflow.com/a/34061692/2946329。 - Salah Akbari
@S.Akbari 是的,我知道,但我需要一个解决方法或类似的东西。 - DevT
尝试使用AsEnumerable()来强制使用Linq to Objects进行评估。这样就会变成:x.MyTable.AsEnumerable().FirstOrDefault.......只是一个想法,还没有在日期转换中测试过。 - Spluf
@Spluf 这仍然会将整个 MyTable 加载到内存中,这通常是不可取的。 - NetMage
2个回答

5
我想我找到了实现它的方法。
var res =  db.Table1
//other tables, and where conditions
.Select(x => new MyObj
{
      //...
      Imp = x.MyTable.FirstOrDefault(y => y.date_val >= System.Data.Entity.DbFunctions.AddMonths(System.Data.Entity.DbFunctions.CreateDateTime(x.year, x.month, 1, 0, 0, 0), 1)).Description
})

1

这个方法有点粗糙,但你可以将 SQL 查询结果实例化为列表再解析日期:

var res = db.Table1.ToList()
//other tables, and where conditions
.Select(x => new MyObj
{
//...
    Imp = x.MyTable.FirstOrDefault(y => y.date_val >= System.Data.Entity.DbFunctions.AddMonths(DateTime.Parse("01/" + x.month + "/" + x.year))).Description
})

如果可能的话,我不会在之前实现这个查询。 - DevT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接