首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetValue LINQ误差

GetValue LINQ误差
EN

Stack Overflow用户
提问于 2017-05-17 14:41:43
回答 2查看 1.6K关注 0票数 1

我试图使用以下代码将实体的特定属性的值检索到变量中。

代码语言:javascript
复制
var item = db.Notices
  .Where(a => a.ID == 0)
  .Select(x => x
     .GetType()
     .GetProperty("Spell_ID")
     .GetValue(x));

我现在只是在玩这个游戏,但在某些时候,我希望能够用任何列名替换'Spell_ID‘文本,并动态地获得这个值。不确定我是不是走对了路,但我得到了以下错误:-

LINQ到实体不识别方法'System.Object GetValue(System.Object)‘方法,并且此方法不能转换为存储表达式。

我知道我这样做不是以正确的方式(而且我对C# MVC /LINQ还比较陌生),但是我花了那么多时间对代码进行修改,我失去了way...can --有人给我指明了正确的方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-17 14:48:28

当前的代码使用反射来获取属性值,但是,从异常消息中我可以推断出,db是一个实体框架DbContext

实体框架根本不支持反射,因为LINQ查询随后由框架本身转换为SQL查询。由于这个原因,如果确实需要获得单个属性,则必须更改您的方法:

代码语言:javascript
复制
var items = db.Notices.Where(a => a.ID == 0).ToList();
var itemsProperty = items.Select(x => x.GetType().GetProperty("Spell_ID"));

这将从数据库中获取所有资源,然后在内存中执行Select部件。

如果您希望数据库中只包含一个单个实体,那么这是一个更好的方法:

代码语言:javascript
复制
var entity = db.Notices.SingleOrDefault(a => a.ID == 0);
var property = entity.GetType().GetProperty("Spell_ID");
票数 5
EN

Stack Overflow用户

发布于 2017-05-17 14:50:42

不是开玩笑,而是错误。

LINQ到实体不识别方法'System.Object GetValue(System.Object)‘方法,并且此方法不能转换为存储表达式。

就像听起来的那样。LINQ无法将GetValue()方法转换为实体框架所做的任何事情。

虽然有一些方法可以让EF和LINQ识别方法,但这有点痛苦。最快的解决方案是只使用一个循环。

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

https://stackoverflow.com/questions/44028029

复制
相关文章

相似问题

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