我有一个实体框架4.0实体对象,名为Revision
w /可为空DateEffectiveFrom
和DateEffectiveTo
日期。我在想,如果有查询的速记方法基于特定QueryDate
日期,而不必使用以下查询结构对象的RevisionHistory
:实体框架自定义查询函数
var results = EntityObject.Revisions.Where(x =>
(x.DateEffectiveFrom == null && x.DateEffectiveTo == null) ||
(x.DateEffectiveFrom == null && x.DateEffectiveTo >= QueryDate) ||
(x.DateEffectiveFrom <= QueryDate && x.DateEffectiveTo == null) ||
(x.DateEffectiveFrom <= QueryDate && x.DateEffectiveTo >= QueryDate));
我试图创建在下面的布尔函数Revision
类:
partial class Revision
{
public bool IsEffectiveOn(DateTime date)
{
return (x.DateEffectiveFrom == null && x.DateEffectiveTo == null) ||
(x.DateEffectiveFrom == null && x.DateEffectiveTo >= date) ||
(x.DateEffectiveFrom <= date && x.DateEffectiveTo == null) ||
(x.DateEffectiveFrom <= date && x.DateEffectiveTo >= date));
}
...
}
,然后更新查询:
var results = EntityObject.Revisions.Where(x => x.IsEffectiveOn(QueryDate));
但这显然d没有转化为SQL。任何想法将不胜感激。
感谢罗伯特 - 这似乎做任何IQuerable查询(即DataContext.Revisions)的伎俩。 IEnumerable 方案的任何想法。 PS - 我很欣赏在文章中使用谓词的详细解释。 –
Josh
2010-05-27 20:58:18
对于IEnumerable场景,您可以看到[Dynamic Linq](http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic- query-library.aspx)的作品。请注意,动态Linq不是强类型的...你必须将你的谓词组合成字符串。 – 2010-05-27 21:11:07