我想基于POST到.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 Core筛选方法,因此,如果我完全偏离轨道,欢迎任何建议。
在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()
有更好的方法吗?