Я пишу микросервис RESTful, используя C# ASP. NET и MongoDB для хранения данных. Я использую MongoDB.Driver для подключения к нему. С Dynami c LINQ я хочу запросить список объектов типов «base», но используя также свойства, которые отсутствуют в «базовом» объекте, но в производных объектах («output001», «output002» и др. * 1035). *.).
Этот пример объяснит это подробно:
public class DoesntMatter
{
List<Base> ObjectList;
}
public class Base
{
String Id
}
public class Derived001 : Base
{
String Name
}
public class Derived002 : Base
{
Double Width
}
public class Derived003 : Base
{
Double Height
}
Теперь я хочу выполнить запрос с динамическими c LINQ к свойствам фильтрации ObjectList производных классов:
var resultList = collection.AsQueryable().Where("ObjectList.Any(o => o.Name == \"Name of the object\" || o.Width == 50)").ToList();
Очевидно и понятно, что я получаю динамическое исключение c LINQ:
{No property or field 'Name' exists in type 'Base'}
{System.Linq.Dynamic.Core.Exceptions.ParseException}
Ограничения:
- Если бы я использовал запрос mon go, это сработало бы прекрасно. Я не хочу использовать его, чтобы сохранить язык запросов моих RESTful Microservices одинаково: LINQ.
- Существует множество производных объектов и сложных данных / запросов, поэтому невозможно передать его к контроллеру, например, с "URI? Имя = Blabla; Ширина = 50; Double = 80"; «больше чем» не может быть реализовано таким образом.
- Получение всех объектов в памяти и выполнение LINQ-операций в памяти будет работать, но приведет к тому, что отобранный миллион записей сможет фильтровать нужный в памяти
Возможные решения, которые я мог бы себе представить:
- переводчик "LINQ to Mon go Query"
- ... любой другое?