C# 我可以在Linq表达式中将字符串参数用作实体属性和对象属性吗?

C# 我可以在Linq表达式中将字符串参数用作实体属性和对象属性吗?,c#,entity-framework,properties,linq-to-entities,C#,Entity Framework,Properties,Linq To Entities,这是我的第一个问题,我正在尽我所能去理解 我想在具有许多唯一属性的表中插入 我想在Linq表达式中使用字符串而不是属性 我想做这样的东西: public List<string> AddEmploye(Employe pEmploye) { List<string> NonUnique = new List<string>(); List<string> Prop = new List<string> {

这是我的第一个问题,我正在尽我所能去理解

我想在具有许多唯一属性的表中插入

我想在Linq表达式中使用字符串而不是属性

我想做这样的东西:

public List<string> AddEmploye(Employe pEmploye)
{
   List<string> NonUnique = new List<string>();
   List<string> Prop = new List<string>
      {
         "ID",
         "NAS",
         "CODE",
      };

   foreach (var prop in Props)
   {
      var result = (from t in _context.TEMP02A
                  where t.prop == pEmploye.prop
                  select t.name).ToList();

      if (result.Count() > 0)
        NonUnique.Add(prop);
   }
   return NonUnique;
}
public List AddEmploye(Employe-pEmploye)
{
List ununique=新列表();
列表属性=新列表
{
“身份证”,
“NAS”,
“代码”,
};
foreach(道具中的var道具)
{
var result=(来自_context.TEMP02A中的t
其中t.prop==pEmploye.prop
选择t.name).ToList();
如果(result.Count()>0)
增加(道具);
}
返回不均匀;
}
我尝试了许多提出的解决方案,但都不适用于我的案例

我尝试了以下解决方案: , , , , 还有许多其他的,但这些解决方案都不适合我的情况

我希望result.count为
0
或更高,但当我尝试时,出现以下错误:

LINQ to实体无法识别propertyInfo.GetValue

有什么建议吗?

你可以试试。它有点旧,但它允许您执行以下操作:

Where($"property_name_as_string = @0", some_value)
在您的情况下,它将类似于:

.Where(prop + " = @0",employee_prop_value_by_reflection_here)
.Select("Name");
从你的例子来看:

var val = GetPropValue(pEmploye, prop);
_context.TEMP02A.Where(prop + " = @0",val);
你可以试试。它有点旧,但它允许您执行以下操作:

Where($"property_name_as_string = @0", some_value)
在您的情况下,它将类似于:

.Where(prop + " = @0",employee_prop_value_by_reflection_here)
.Select("Name");
从你的例子来看:

var val = GetPropValue(pEmploye, prop);
_context.TEMP02A.Where(prop + " = @0",val);


嗨,迈克尔,道具是从哪里来的?另外,我不确定你的实际问题是什么,你能试着解释清楚你想做什么吗?看起来他想用EF按字符串名访问一列,但我不确定。道具是我的实体属性,在我的数据库表中是唯一的列。我想使用字符串而不是实体属性。目标是减少代码行的数量,因为我对7个实体属性重复相同的过程。在
\u上下文.TEMP02A
表中
t
的类型是什么?它也是员工吗?是的!类型
t
pEmploye
都是相同的迈克尔,道具从何而来?另外,我不确定你的实际问题是什么,你能试着解释清楚你想做什么吗?看起来他想用EF按字符串名访问一列,但我不确定。道具是我的实体属性,在我的数据库表中是唯一的列。我想使用字符串而不是实体属性。目标是减少代码行的数量,因为我对7个实体属性重复相同的过程。在
\u上下文.TEMP02A
表中
t
的类型是什么?它也是员工吗?是的!类型
t
pEmploye
都是相同的,我尝试过这样做:
var result=\u context.TEMP02A.Where($“property\u name\u as\u string==some\u value”)但我得到了这个错误:无法从'string'转换为'System.Linq.Expression.Expression',从您提出的开始,我继续这样做:
var result=\u context.TEMP02A.Where(t=>GetPropValue(t,prop)==GetPropValue(pEmploye,prop)).Select(t=>t.name)。这会执行,但当我添加
.ToList()
时,我会出现以下错误:
System.NotSupportedException:“LINQ to Entities无法识别方法'System.Object GetPropValue(System.Object,System.String)'方法,并且此方法无法转换为存储表达式。
它看起来像
GetValue()
方法在我的表达式中不起作用:(从上一个示例开始,它说:
方法'Where'不重载2个参数
是否包含动态linq库?您需要使用System.linq.dynamic包含
我尝试了这个:
var result=\u context.TEMP02A.Where($“property\u name\u as\u string==some\u value”);
但我遇到了这个错误:无法从'string'转换为'System.Linq.Expression.Expression',从您提出的开始,我接着说:
var result=\u context.TEMP02A.Where(t=>GetPropValue(t,prop)==GetPropValue(pEmploye,prop))。选择(t=>t.name);
。这是在我添加
.ToList()时执行的
,我继续执行此错误:
System.NotSupportedException:“LINQ to Entities无法识别方法'System.Object GetPropValue(System.Object,System.String)'方法,并且此方法无法转换为存储表达式。
看起来
GetValue()
方法在我的表达式中不起作用:(在上一个示例中,它说:
Where'方法不重载2个参数
是否包含动态linq库?您需要使用System.linq.dynamic包含