Revision
(Nullable 포함) DateEffectiveFrom
및 DateEffectiveTo
이라는 Entity Framework 4.0 엔터티 개체가 있습니다. 쿼리의 짧은 손 방법이 있다면 궁금 해서요 대신 다음 쿼리 구조를 사용하지의 특정 QueryDate
날짜를 기준으로 객체의 RevisionHistory
다음에 다음 부울 함수를 만드는Entity Framework 사용자 지정 쿼리 함수
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로 변환 할 필요가 없습니다. 어떤 아이디어라도 높이 평가할 수 있습니다.
고마워 Robert -이 질문 (예 : DataContext.Revisions)에 대한 Ikeerable 쿼리의 트릭을 수행하는 것 같았습니다. IEnumerable 시나리오에 대한 아이디어. PS - 아티클에서 조건 자 사용에 대한 자세한 설명도 감사하게 생각합니다. –
Josh
IEnumerable 시나리오의 경우 [Dynamic Linq] (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic- query-library.aspx)가 작동합니다. Dynamic Linq는 강력한 형식이 아니라 ... 당신은 당신의 술어를 문자열로 구성해야합니다. –