如何修复Entity Framework的部分类方法调用?

时间:2014-05-29 09:33:50

标签: c# winforms entity-framework linq-to-sql

我在实体框架中使用部分类来从名为vPerson的视图中计算人的年龄。

private string _age;
public string Age
{
    get{return CalculateAge();}
}

private string CalculateAge()
{
    return Convert.ToInt32(System.DateTime.UtcNow.Date.Year - _dob.Value.Year); 
}

但是,当我在EF select中使用Age时,它不会处理查询。这是代码:

public IQueryable getData()
{
         var res = from p in _context.vPerson.Select
         (
             p=>new PersonDetail
             {
                name = p.name,
                dob = p.dob,
                age = p.Age
             }
         );
         return res;
 } 

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

问题是EF无法将您的计算转换为SQL查询。有两种方法可以解决这个问题:

  1. 在vPerson之后使用.toList()实现结果集,然后在末尾追加.AsQueryable()。请注意,这样就会丢失查询的延迟执行。
  2. 尝试使用实体函数重写此操作,EF可以将其转换为SQL。请参阅here

答案 1 :(得分:0)

EF查询被转换为SQL查询。自定义属性不作为表中的列存在,因此无法将其转换为查询。出于同样的原因,您不能在EF查询中使用方法(特定数据库方法除外,例如SqlFunctions) - 它们无法转换为SQL查询。所以你真的有两个问题:自定义属性和方法调用。您唯一的选择是直接在查询中进行计算。