微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我使用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示例等表达式.

原文地址:https://www.jb51.cc/csharp/97246.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐