않습니다사용자 정의 기능은 때때로 때때로 제대로 번역 나는이 기능하지
public static IQueryable<Article> WhereArticleIsLive(this IQueryable<Article> q)
{
return q.Where(x =>
x != null
&& DateTime.UtcNow >= x.PublishTime
&& x.IsPublished
&& !x.IsDeleted);
}
를 그리고이 쿼리에서 잘 작동합니다 :
from a in Articles.WhereArticleIsLive()
where a.Id == 5
select new { a.Title }
그러나 그렇지 않습니다 이 약간 더 복잡한 쿼리에서 작동 :
from s in Series
from a in Articles.WhereArticleIsLive()
where s.Id == a.SeriesId
select new { s, a }
를이 오류 메시지가 :
에서 NotSupportedException : 엔티티 LINQ 메소드 'System.Linq.IQueryable
1[TheFraser.Data.Articles.Article] WhereArticleIsLive(System.Linq.IQueryable
1 TheFraser.Data.Articles.Article])'방식을 인식하지 않고,이 방법은 저장 식으로 변환 될 수 없다.
왜 그런가? 이와 같은 쿼리 매개 변수를 통합하는 또 다른 방법이 있습니까?
미리 감사드립니다.
이것은 : (테스트하지)의 라인을 따라 뭔가를 쿼리를 만들 때이 표현에 대한 참조를 저장할 수 있도록, 그리고
: 당신은 기사에서 다음 정적 메소드를 정의 할 수 있습니다 거의 오른쪽. (1)'표현식'은 올바른 방법입니다. (2) 당신은 LINQKit (다른 것들에 아주 좋습니다)을이 작업이나'Compile '등을 위해서 필요로하지 않습니다. (3) 키는 표현식에 대한 참조를 저장하는 것입니다 :'Expression> isLive = Article.IsLive(); (isLive)' –
@Craig Stuntz : 피드백에 대한 감사, 그에 따라 내 대답을 업데이트했습니다. – jeroenh
아, 그게 바로 Expression입니다. Linqkit도 주셔서 감사합니다. 편리 할 것으로 확신합니다. –