繁体   English   中英

C#实体框架5.0通用LINQ

[英]C# Entity Framework 5.0 Generic LINQ

我正在尝试使用泛型将记录加载到dbcontext高速缓存中。 我正在使用以下代码。

_Context.Set<T>().Where(R => (int)R.GetType().GetProperty("Id").GetValue(R) == id).Load();

该代码引发以下错误,我似乎无法弄清楚如何解决它。

System.NotSupportedException:LINQ to Entities无法识别方法'System.Object GetValue(System.Object)'方法,并且该方法无法转换为商店表达式。

是我正在做的事情还是有其他方法。

问题是您正在尝试将Reflection方法( GetType()GetProperty()GetValue() )与LINQ to Entities一起使用,但它不理解它们。 允许在LINQ查询中使用的方法仅限于查询提供程序支持的方法,就LINQ to Entities而言,多数情况下可以相对轻松地转换为SQL。

不幸的是,您将无法尝试以这种方式匹配ID。 只要T指定的实体类型的主键具有单个列,并且id是正确的类型,则使用.Find(id)将起作用,但这将是非常脆弱的方法,即使它在某些情况下也可以使用。

如果您稍微描述一下您的方案,那么人们可能会对采用另一种方法提出一些好的建议。 您能解释一下为什么要这样做吗? 想要对您的DbContext执行查询而不知道您感兴趣的实体类型是非常不寻常的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM