首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架中的OrderBy虚拟财产

实体框架中的OrderBy虚拟财产
EN

Stack Overflow用户
提问于 2017-03-08 11:50:58
回答 2查看 1.4K关注 0票数 5

可以在实体上orderby虚拟属性吗?

我有一个类似于:

代码语言:javascript
运行
复制
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‘。只支持初始化器、实体成员和实体导航属性。”

我最初在一个分部类中使用了该方法,该属性用于返回数据,而不是排序。

有办法绕道吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-08 11:58:21

而不是仅仅使用.OrderBy(x => x.TestName),您必须在EF查询中使用.ToList().OrderBy(x => x.TestName)

这是因为TestName属性在数据库表中不作为列存在,而且查询不能转换为SQL语句。.ToList()调用将查询具体化为一个C#集合,然后可以对其进行排序。

票数 2
EN

Stack Overflow用户

发布于 2017-03-08 12:08:59

您可以使用DelegateDecompiler将属性中的代码展开为表达式树,这意味着Linq实体可以从它生成SQL。

https://github.com/hazzik/DelegateDecompiler

您只需使用[Computed]属性修饰属性,并调用.Decompile()作为linq查询的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42670605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档