Запрос модели в Entity Framework Core с использованием сущностей Dynami c и Dynami c Связанные сущности - PullRequest
0 голосов
/ 14 марта 2020

Я новичок в EF Core и разрабатываю с ASP. NET Core MVC с Entity Framework Core. Мне нужно запросить мою модель, динамически выбирая:

тип, - связанные объекты, которые должны быть загружены, - критерии фильтрации, - поля для загрузки, - функции для выполнения с результатом

Другими словами, мне нужно превратить этот запрос * stati c:

    var staticquery = _context
        .User
        .Where(u => u.UserId == 1)
        .Include(u => u.Profile)
            .Where(p => p.Profile.ProfileDescription == "sometext")
        .Select(p => p.Profile.Segment)
        .Count();

в этот динамический c запрос:

    var dEntity = "User";
    var dEntityProperty = "USerId");
    var dEntityValue = 1;
    var dIncludeProperty = "Profile";
    var dWhereProperty = "ProfileDescription";
    var dWhereValue = "sometext";
    var dSelect = "Profile.Segment"
    var dOper = "Count()";

    var dynquery = _context
        .dEntity
        .Where(x => x.dEntityProperty == dEntityValue)
        .Include(x => x.dIncludeProperty)
            .Where(x => x.dIncludeProperty.dWhereProperty == dEntityValue.dWhereValue)
        .Select(x => x.dSelect)
        .dOper;

Не нужно работать конкретно со строкой. Подойдет любое динамическое выражение c. Я искал решение в течение нескольких часов и нашел первую часть (динамический запрос сущности к запросу) в этом SO ( Таблица динамического доступа в EF Core 2.0 ). Но так как это решение оставляет меня с объектом IQueryable, похоже, что оттуда переходить к включению связанных сущностей, фильтровать их и т. Д. c. Не представляется возможным. Я заранее благодарю вас за вашу помощь (пример также был бы очень признателен, так как упомянутое SO, похоже, решает и мою конкретную проблему c в комментариях от респондента, но оставляет ее в общем («- принимая IQueryable и строку вызовите метод Include с помощью отражения) ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...