LINQ 表达式无法翻译!?为什么?

The LINQ expression could not be translated!? why?

我正在尝试在给定特定条件的情况下从 table 中检索一些记录...这是我的代码:

var areas = _context.Set<T>()
                .Where(p => (int)p.GetType().GetProperty(campoOrdem).GetValue(p) >= indexMin &&
                    (int)p.GetType().GetProperty(campoOrdem).GetValue(p) <= indexMax).ToList();

我收到这个错误:

'The LINQ expression 'DbSet<RH_Cargos> .Where(r => (int)r.GetType().GetProperty(__campoOrdem_0).GetValue(r) >= __indexMin_1 && (int)r.GetType().GetProperty(__campoOrdem_0).GetValue(r) <= __indexMax_2)' could not be translated.

我所有的变量都得到了正确的值。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();
 }