如何使用带LINQ的表字段创建一个新的DateTime条件

时间:2016-03-31 13:49:37

标签: c# entity-framework linq

我在c#中有一个win应用程序,我将获得一个linq查询,其中where条件包含由表字段连接的数据。 我的疑问是:

var fatture = (from t016 in cont.T016_FATT
              where t016.ID_FATTURA = aiIdFattura
              && Convert.toDateTime("01" + t016.COD_MESE+"/"+t016.ANNO) > aiData
              select t016).ToList();

其中t016.COD_MESE是字符串表示月份值,aiIdFattura是函数中传递的小数参数,aiData是DateTime参数。

但是这个linq查询给了我这个错误:

  

LINQ to Entities无法识别Convert.ToDateTime

方法

我在互联网上找到了一个解决方案,建议使用EntityFramework(版本6)中存在的DBFunctions,但我有一个次要版本的EntityFramework,所以我不能使用这个功能。

另一个找到的解决方案是在linq查询之前格式化日期,但在我的情况下是不可能的,因为取决于T016_FATT所以我不能先格式化我的日期。

所以你有什么想法建议我吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

请记住,您的查询将被转换为SQL,在这种情况下,您的Linq提供程序不知道如何将该方法调用转换为sql语句。要避免该问题,可以使用AsEnumerable扩展方法将Linq to Entities切换为Linq to Objects。调用该方法后,您可以应用日期转换:

var fatture = cont.T016_FATT.Where(e=>e.ID_FATTURA == aiIdFattura)
                            .AsEnumerable()
                            .Where(e=>Convert.toDateTime("01" +"/"+ e.COD_MESE+"/"+e.ANNO) > aiData)
                            .ToList();

如果要查看Linq to Entities支持的方法,可以查看link