我理解为什么会出现以下错误,但是我不确定如何才能提供可以绕过它的解决方案。
{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.
我不想只返回 IEnumerable,因为我想将过滤器转换为底层 SQL 语句,这样我就不会查询这么多行等
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);
}
客户只是我数据库中的一个实体对象,具有 Id、CustomerNumber 等属性
Session 是我数据库中的另一个 Entity 对象,IsStatus 方法是这样的:
public bool IsStatus(ProcessStatusEnum status)
{
return SessionStatus == (byte)status;
}
我使用的条件通常非常简单,因此我相信它们应该能够转换为 SQL。我想这只是因为它们在他们不能的函数内。我可以使用其他东西作为返回类型来让这些工作吗?