выберите только определенные поля в запросе mvc linq, который включает несколько включений - PullRequest
0 голосов
/ 11 марта 2020

При просмотре сгенерированного json я увидел, что страница правил содержит данные изображения. Я проследил это до следующего кода: `

.Include(m => m.OrderRuleType)
            .Include(m => m.OrderRuleType.Type)
            .Include(m => m.OrderRuleType.Category)
            // best match fields
            .Include(m => m.TicketType)
            .Include(m => m.DestTicketType)
            .Include(m => m.Shipper)
            .Include(m => m.CarrierType)
            .Include(m => m.Carrier)
            .Include(m => m.DriverGroup)
            .Include(m => m.Driver)
            .Include(m => m.TruckType)
            .Include(m => m.ProductGroup)
            .Include(m => m.Destination)
            .Include(m => m.Origin)
            .Include(m => m.DestState)
            .Include(m => m.OriginState)
            .Include(m => m.DestRegion)
            .Include(m => m.OriginRegion)
            .Include(m => m.Producer)
        .Where(m => !m.OrderRuleType.Hidden)
        .Where(m => m.ID == id || id == 0)

Я попытался сделать .select на оскорбительном include (отправителе) следующим образом:

.Select(m => new { m.ID, m.Name}})

, который вызвал красную линию для всего кода после этого. Я также попытался добавить в него .asEnumerable ().

Как правильно выбрать из них только несколько полей? Практически во всех из них мы используем только поле идентификатора и имени из этой таблицы.

Я, вероятно, мог бы сделать .select в самом конце, но я не знаю, возможно ли выбрать такие значения без создания модели представления. Я попытался добавить выбор после включения грузоотправителя, но он прервал все последующие включения.

1 Ответ

0 голосов
/ 11 марта 2020

Я решил это с помощью анонимного выбора. Я не смог выбрать непосредственно в модель по двум причинам: 1. Некоторые из полей (все именованные) не были отображены в поля без установщиков, и 2. Модель была привязана к таблице. Вот рабочий код:

var data = db.OrderRules
                        .Include(m => m.OrderRuleType)
                        .Include(m => m.OrderRuleType.Type)
                        .Include(m => m.OrderRuleType.Category)
                        // best match fields
                        .Include(m => m.TicketType)
                        .Include(m => m.DestTicketType)
                        .Include(m => m.Shipper)
                        .Include(m => m.CarrierType)
                        .Include(m => m.Carrier)
                        .Include(m => m.DriverGroup)
                        .Include(m => m.Driver)
                        .Include(m => m.TruckType)
                        .Include(m => m.ProductGroup)
                        .Include(m => m.Destination)
                        .Include(m => m.Origin)
                        .Include(m => m.DestState)
                        .Include(m => m.OriginState)
                        .Include(m => m.DestRegion)
                        .Include(m => m.OriginRegion)
                        .Include(m => m.Producer)
                    .Where(m => !m.OrderRuleType.Hidden)
                    .Where(m => m.ID == id || id == 0)
                    .Select(m => new { 
                        m.ID,
                        allowRowDeactivate = true,
                        allowRowEdit = true,
                        m.EffectiveDate,
                        m.EndDate,
                        m.Value,
                        m.TypeID,
                        m.OrderRuleType,
                        m.OrderRuleType.Type,
                        m.OrderRuleType.Category,
                        OriginTicketTypeName = m.TicketType.Name ?? BestMatchCore.DEFAULT_LABEL,
                        DestTicketTypeName = m.DestTicketType.Name ?? BestMatchCore.DEFAULT_LABEL,
                        ShipperName = m.Shipper.Name ?? BestMatchCore.DEFAULT_LABEL,
                        CarrierTypeName = m.CarrierType.Name ?? BestMatchCore.DEFAULT_LABEL,
                        CarrierName = m.Carrier.Name ?? BestMatchCore.DEFAULT_LABEL,
                        DriverGroupName = m.DriverGroup.Name ?? BestMatchCore.DEFAULT_LABEL,
                        DriverName = (m.Driver.FirstName + " " + m.Driver.LastName == " ")? BestMatchCore.DEFAULT_LABEL: m.Driver.FirstName + " " + m.Driver.LastName,
                        TruckTypeName = m.TruckType.Name ?? BestMatchCore.DEFAULT_LABEL,
                        ProductGroupName = m.ProductGroup.Name ?? BestMatchCore.DEFAULT_LABEL,
                        DestinationName = m.Destination.Name ?? BestMatchCore.DEFAULT_LABEL,
                        OriginName = m.Origin.Name ?? BestMatchCore.DEFAULT_LABEL,
                        DestStateName = m.DestState.Abbreviation ?? BestMatchCore.DEFAULT_LABEL,
                        OriginStateName = m.OriginState.Abbreviation ?? BestMatchCore.DEFAULT_LABEL,
                        DestRegionName = m.DestRegion.Name ?? BestMatchCore.DEFAULT_LABEL,
                        OriginRegionName = m.OriginRegion.Name ?? BestMatchCore.DEFAULT_LABEL,
                        ProducerName = m.Producer.Name ?? BestMatchCore.DEFAULT_LABEL,
                        CreateDate = m.CreateDateUTC,
                        m.CreatedByUser,
                        LastChangeDate = m.LastChangeDateUTC,
                        m.LastChangedByUser

                        });

Это создало запрос, который вернул только те поля, которые я хотел.

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