在特定条件下,我试图从表中检索一些记录...这是我的代码:
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)<= __indexMax_2)'无法翻译。
我所有的变量都获取正确的值。campoOrdem是包含字段名称的字符串,indexMin和indexMax是我在数据库中的订单值,在示例中,indexMin为1,indexMax为2 ...
发生了什么事?
答案 0 :(得分: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();
}