Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C:如何在EF.Where()或Select()查询中引用动态对象属性?_C#_.net Core_Entity Framework Core - Fatal编程技术网

C# C:如何在EF.Where()或Select()查询中引用动态对象属性?

C# C:如何在EF.Where()或Select()查询中引用动态对象属性?,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我想根据发布到.NET Core 2.2 Web API的多个查询值,从Entity Framework Core DBContext返回一个过滤列表 API方法将[FromBody]映射到QueryObj实例 QueryObj类主要有大约30个属性,但不是所有的字符串。这些是较大实体中属性的可搜索子集,例如:lastName、serialNumber、customerID、purchaseDate等 由于查询选项可能会更改,而且编写和维护起来会很麻烦,因此我不希望硬编码~30比较,如: .Wh

我想根据发布到.NET Core 2.2 Web API的多个查询值,从Entity Framework Core DBContext返回一个过滤列表

API方法将[FromBody]映射到QueryObj实例

QueryObj类主要有大约30个属性,但不是所有的字符串。这些是较大实体中属性的可搜索子集,例如:lastName、serialNumber、customerID、purchaseDate等

由于查询选项可能会更改,而且编写和维护起来会很麻烦,因此我不希望硬编码~30比较,如:

.Where(x => x.Prop1Name == query.Prop1Name && ... x.Prop30Name == query.Prop30Name);
但我不知道如何动态引用循环中的属性。。。 或者,如果需要循环,或者是理想的循环。也许不是?我不知道什么是惯用的.NET核心过滤方法,所以如果我完全偏离了轨道,欢迎提供任何建议

在JS中,我可能会做如下操作:

return myDataSvc.filter(x => {
  for (prop in query){
    if(x[prop] == query[prop]){
       return true;
    } 
  }
}
这可能是错误的,但你明白了-这很简单

在C语言中,引用对象属性的括号符号似乎不存在,或者至少我尝试的方法不起作用

我找到的唯一答案是一堆自省,比如:

x.GetType().GetProperty(prop.ToString()).GetValue() == 
query.GetType().GetProperty(prop.ToString()).GetValue()

有没有更好的办法

如果您想要与JS类似的功能,可以使用Request.QueryString作为输入数据。通常也是最好的方法是使用谓词生成器。如果您想要与JS类似的功能,可以使用Request.QueryString作为输入数据。关于动态构建Where语句,有很多帖子。通常最好的方法是使用谓词生成器。