可以在实体上orderby虚拟属性吗?
我有一个类似于:
public int Id{get;set;}
public string Name {get;set;}
public virtual string TestName
{
get { return string.Format("{0}{1}", Name , Id); }
}当我按TestName属性排序时,会得到以下错误:
“LINQ实体中不支持指定类型成员'TestName‘。只支持初始化器、实体成员和实体导航属性。”
我最初在一个分部类中使用了该方法,该属性用于返回数据,而不是排序。
有办法绕道吗?
发布于 2017-03-08 11:58:21
而不是仅仅使用.OrderBy(x => x.TestName),您必须在EF查询中使用.ToList().OrderBy(x => x.TestName)。
这是因为TestName属性在数据库表中不作为列存在,而且查询不能转换为SQL语句。.ToList()调用将查询具体化为一个C#集合,然后可以对其进行排序。
发布于 2017-03-08 12:08:59
您可以使用DelegateDecompiler将属性中的代码展开为表达式树,这意味着Linq实体可以从它生成SQL。
https://github.com/hazzik/DelegateDecompiler
您只需使用[Computed]属性修饰属性,并调用.Decompile()作为linq查询的一部分。
https://stackoverflow.com/questions/42670605
复制相似问题