【发布时间】:2015-05-08 16:15:05
【问题描述】:
我在 LINQ Where 方法(返回 IQueryable 结果)中为谓词使用表达式函数,该方法采用类参数:
public ActionResult FilterProfiles(FilterViewModel filter)
{
var profiles = database.Profiles
.Where(Predicate(filter))
...
}
谓词是:
private static Expression<Func<UserProfile, bool>> Predicate(FilterViewModel f)
{
return p => (CompareFilter(p, f));
}
问题出在 CompareFilter 函数上:
private static bool CompareFilter(UserProfile profile, FilterViewModel filter)
{
if (filter.FirstName != null)
{
if (profile.FirstName != null)
{
if (profile.FirstName.CompareTo(filter.FirstName) != 0)
{
return false;
}
}
...
}
例外是:
LINQ to Entities 无法识别方法 'Boolean CompareFilter(Project.Models.UserProfile, Project.Web.ViewModels.FilterViewModel)' 方法,并且该方法无法转换为存储表达式。
异常详细信息:System.NotSupportedException:LINQ to Entities 无法识别方法 'Boolean CompareFilter(Project.Models.UserProfile, Project.Web.ViewModels.FilterViewModel)' 方法,并且此方法无法转换为存储表达式。
提前致谢!
【问题讨论】:
标签: c# linq entity-framework predicate