我在一个项目中使用 Telerik OpenAccess 和 SQL Server,我需要能够搜索某人在某个日期的年龄。我遇到的问题是该人的出生日期存储在一个表中,而要比较的日期在另一个表中,这使我无法使用计算列。但是,它们被连接在一起,以便我可以通过在部分类中创建自己的非持久属性来计算年龄,如下所示:
public partial class Student
{
[Telerik.OpenAccess.Transient]
private int? _ageUponArrival;
public virtual int? AgeUponArrival
{
get
{
try
{
var dob = DateTime.Parse(this.StudentProfiles.First().Person.YearOfBirth);
var programStart = (DateTime)(this.StudentPrograms.First().ProgramStart);
this._ageUponArrival = programStart.Year - dob.Year;
if (dob > programStart.AddYears(-(int)(this._ageUponArrival)))
{
(this._ageUponArrival)--;
}
}
catch (Exception e)
{
this._ageUponArrival = null;
}
return _ageUponArrival;
}
set { }
}
}
请忽略这些表的设置有多糟糕,这是我继承的,目前无法更改。这种方法的问题是该属性不可用于使用 Linq 进行搜索。我知道我可以创建一个可以为我执行此操作的视图,但我宁愿不必为此维护视图。有没有办法通过 Telerik 创建一个计算属性,该属性将在 db 服务器上以可搜索的方式计算?