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();
}
我正在尝试在给定特定条件的情况下从 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();
}