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

问题描述 投票:5回答:4

我想首先将一个应用程序转换为Entity FrameWork代码。我现在的代码是

 string sFrom  ="26/12/2013";
 select * FROM Trans where  CONVERT(datetime, Date, 105) >=   CONVERT(datetime,'" + sFrom + "',105) 

我试过了

 DateTime dtFrom = Convert.ToDateTime(sFrom );
TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 

但是我得到了这样的错误

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

请提前帮助,谢谢

c# entity-framework linq-to-entities
4个回答
8
投票

当你这样做:

TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 

LINQ to Entities无法将大多数.NET Date方法(包括您使用的转换)转换为SQL,因为没有等效的SQL。你需要做的是在下面做:

 DateTime dtFrom = Convert.ToDateTime(sFrom );
  TransRepository
 .Entities.ToList()//forces execution
 .Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 

但等待上面的查询将获取整个数据,并在其上执行.Where,绝对你不希望这样,

简单的灵魂将是this,个人而言,我会将我的实体字段作为DateTime和db列作为DateTime

但是,因为你的db / Entity Date字段是字符串,除了将实体和db中的字段更改为DateTime然后进行比较之外,你没有任何其他选项


3
投票

为什么您的日期列是字符串?它不应该是DateTime

无论如何,如果您尝试在针对实体存储库的.Where语句中使用.NET函数执行转换,您将收到该错误。

您最好的选择是将该列从字符串更改为DateTime并从那里继续。如果你这样做,.Where声明将是:

DateTime dtFrom = Convert.ToDateTime(sFrom );
var something = TransRepository.Entities.Where(x  => x.Date >= dtFrom) ;

0
投票

/我有一个类似的问题,我得到一个搜索字符串,并查询日期时间列...见第4行/

1)case "Admission_Date":
2)if (!String.IsNullOrEmpty(SearchValue))
3)   {
4)   DateTime dtFrom = 
Convert.ToDateTime(SearchValue); 
wards = from s in db.CORE_DATA_tbl
    where s.Admit_Date == dtFrom
    orderby s.ActionType, s.AdmissionLocation
    select s;
    }
    break;

0
投票

从linq语句中取出转换部分并将其保存在变量中,如下所示:

var xyz = Convert.ToDateTime("12/31/2018");

并在linq语句中使用此变量。

© www.soinside.com 2019 - 2024. All rights reserved.