Запрос с Dynami c LINQ в списке объектов с производными объектами в MongoDB - PullRequest
0 голосов
/ 27 апреля 2020

Я пишу микросервис 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"
  • ... любой другое?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...