次のエラーが発生する理由は理解していますが、それを回避できるソリューションを提供する方法がわかりません。
{System.NotSupportedException: LINQ to Entities does not recognize the method 'Boolean IsStatus(CDAX.DataModel.ProcessStatusEnum)' method, and this method cannot be translated into a store expression.
フィルターを基礎となる SQL ステートメントに変換して、非常に多くの行などを照会しないようにするため、単に IEnumerable を返したくありません。
public override IQueryable<Session> GetQuery()
{
Func<Session, bool> activeSessions = (session) => !session.IsStatus(ProcessStatusEnum.Deleted);
// these functions are causing issues. I'm not sure how to change them to
// work with IQueryable??
return base.GetQuery().Where(p => activeSessions(p) && _queryFilter.FilterOn(p.Customer));
}
_queryFilter クラスは、次のようなインターフェースです。
public interface IDataQueryFilter
{
bool FilterOn(Customer obj);
}
Customer は、Id、CustomerNumber などのプロパティを持つデータベース内のエンティティ オブジェクトです。
Session はデータベース内の別の Entity オブジェクトであり、IsStatus メソッドは次のようなものです。
public bool IsStatus(ProcessStatusEnum status)
{
return SessionStatus == (byte)status;
}
私が使用する条件は通常非常に単純なので、SQL に変換できるはずです。それらができないのは関数内にあるからだと思います。これらを機能させるために、戻り値の型として何か他のものを使用できますか?