加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Dynamic LINQ to Entities中使用DateTime

发布时间:2020-12-15 18:00:44 所属栏目:百科 来源:网络整理
导读:我使用LINQ to Entities来检索项目购买日期,如下所示: where EntityFunctions.TruncateTime(order.PurchaseDate) == myPurchaseDate.date 这里的关键是DB列包含日期和时间,因此必须剥离比较的时间.这段代码工作正常. 现在,我想使用动态LINQ to Entities做同
我使用LINQ to Entities来检索项目购买日期,如下所示:
where EntityFunctions.TruncateTime(order.PurchaseDate) == myPurchaseDate.date

这里的关键是DB列包含日期和时间,因此必须剥离比较的时间.这段代码工作正常.

现在,我想使用动态LINQ to Entities做同样的事情.我正在使用VS2010代码示例文件夹中的dynamic.cs.当我编码:

.where("EntityFunctions.TruncateTime(PurchaseDate) == @0",myPurchaseDate.date);

或者我的任何变体都会收到错误消息.我需要编写什么作为字符串值才能使其工作? (因为我可以在字符串中使用.StartsWith或.Contains,我希望有一些日期函数动态LINQ会识别).

我知道我可以创建动态LINQ查询作为日期范围,从概念上讲:

PurchaseDate >= myPurchaseDate@midnight and PurchaseDate <= myPurchaseDate+23:59:59

实际上,从SQL Server的角度来看,日期范围可能更有效,但我想知道在动态LINQ到实体中是否存在类似TruncateTime或ToShortDate的内容.

解决方法

我最近开始在项目中使用动态linq,并且还希望在没有时间组件的情况下比较日期. Microsoft的动态linq C#示例代码(Dynamic.cs)支持一组固定的类型,而EntityFunctions不是其中之一.

但通过一些实验,我发现只需将EntityFunctions添加到预定义类型的数组中,就可以使用TruncateTime和其他EntityFunctions方法.

以下是Dynamic.cs预定义类型数组在我的项目中的样子:

static readonly Type[] predefinedTypes = {
    typeof(Object),typeof(Boolean),typeof(Char),typeof(String),typeof(SByte),typeof(Byte),typeof(Int16),typeof(UInt16),typeof(Int32),typeof(UInt32),typeof(Int64),typeof(UInt64),typeof(Single),typeof(Double),typeof(Decimal),typeof(DateTime),typeof(TimeSpan),typeof(Guid),typeof(Math),typeof(Convert),typeof(System.Data.Objects.EntityFunctions)             // JimM
};

使用这个修改过的Dynamic.cs文件,我可以创建动态linq查询,包括问题中的PurchaseDate示例等表达式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读