3 回答
TA贡献1850条经验 获得超11个赞
您不能使用未映射到Where表达式中的数据库列的属性。您必须基于映射属性构建表达式,例如:
var date = DateTime.Now.AddYears(-from);
result = result.Where(p => date >= p.DOB);
// you don't need `AsQueryable()` here because result is an `IQueryable` anyway
作为未映射Age属性的替代,您可以将此表达式提取到静态方法中,如下所示:
public class clsProfileDate
{
// ...
public DateTime DOB { get; set; } // property mapped to DB table column
public static Expression<Func<clsProfileDate, bool>> IsOlderThan(int age)
{
var date = DateTime.Now.AddYears(-age);
return p => date >= p.DOB;
}
}
然后以这种方式使用它:
result = result.Where(clsProfileDate.IsOlderThan(from));
TA贡献1770条经验 获得超3个赞
很多人都会说这是一个错误的答案,因为这不是最佳实践,但你也可以在你的位置之前将其转换为List。
result = result.ToList().Where(p => date >= p.DOB);
Slauma的答案更好,但这也可行。这会花费更多,因为ToList()将对数据库执行查询并将结果移动到内存中。
添加回答
举报