如何解决LINQ表达式无法翻译!为什么?
在特定条件下,我试图从表中检索一些记录...这是我的代码:
var areas = _context.Set<T>()
.Where(p => (int)p.GetType().GetProperty(campoOrdem).GetValue(p) >= indexMin &&
(int)p.GetType().GetProperty(campoOrdem).GetValue(p) <= indexMax).ToList();
我遇到此错误:
'LINQ表达式'DbSet
哪里(r =>(int)r.GetType()。GetProperty(__ campoOrdem_0).GetValue(r)> = __indexMin_1 &&(int)r.GetType()。GetProperty(__ campoOrdem_0).GetValue(r)
我所有的变量都获取正确的值。campoOrdem是包含字段名称的字符串,indexMin和indexMax是我在数据库中的订单值,在示例中,indexMin为1,indexMax为2 ...
发生了什么事?
解决方法
反射对您要执行的操作无效,但是如果属性始终具有相同的名称,则可以使用通用约束(如果可以将该接口添加到所有相关实体):
public interface IEntityWithCampoOrdem
{
public int CampoOrdem { get; } // property name should always be the same
}
这假设可以像这样定义实体RH_Cargos
:
public class RH_Cargos : IEntityWithCampoOrdem
{
// other properties
public int CampoOrdem { get; set; }
}
现在您可以像这样创建通用方法:
public void GetAreas<T>() where T : IEntityWithCampoOrdem
{
var areas = _context.Set<T>()
.Where(p => p.CampoOrdem >= indexMin &&
p.CampoOrdem <= indexMax).ToList();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。