我目前使用Dynamic LINQ(original codeplex link)库来实现动态搜索功能。我有一个要求,我需要OrderBy
a DateTime?
字段只考虑日期而不是时间。 我正在查询使用EntityFramework
的SQL Azure数据库。动态LINQ OrderBy仅日期对象实体框架上的日期
下面是示例实体。
public class SampleEntity
{
public DateTime? DateCreated { get; set; }
public bool Flag { get; set; }
}
下面是查询数据库的代码。
var orderByString = "DateCreated.Value.Date asc, Flag"; //This is a dynamic string
var query = _context.Set<SampleEntity>().OrderBy(orderByString);
该表达式(“DateCreated.Value.Date”)由System.Linq.Dynamic
没有问题的解析,但它引发以下错误(这是可以理解的),因为这样的事实,它不是由LINQ支持到实体。 请记住,这必须在IQueryable(I can't use the answer from this post)上工作,因为我需要完成服务器端的排序。
LINQ to Entities不支持指定的类型成员'Date'。仅支持初始化程序,实体成员和实体导航属性。
解决方法是使用DbFunctions.TruncateTime()
表示为in this answer等。但是,这不会与System.Linq.Dynamic
有关如何解决此问题的任何想法。可能的解决方案是将另一列添加到数据库中,仅使用日期部分DateCreated
并查询该列。不过,我宁愿不这样做,并正在寻找其他解决方案来解决这个问题。 另一种方法是动态生成lambda表达式并返回DbFunctions.TruncateTime,然后对数据库执行该操作。 任何输入赞赏。
感谢,
凭啥不这项工作开箱?几乎每个软件项目都有这个要求。 – FizxMike