Я хочу вернуть отфильтрованный список из DBContext Entity Framework-Core, основанный на нескольких значениях запроса, отправленных в .NET Core 2.2 Web API.
Метод API сопоставляет [FromBody]
с экземпляром QueryObj
.
Класс QueryObj
имеет около 30 свойств (в основном, но не все строки).Это подмножество searachable для свойств в более крупном объекте (например: «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()
Есть идеи для лучшего подхода?