linq .Select(q => new { набор полей по условию })

291
11 апреля 2017, 07:34

День добрый, подскажите пожайлуста кто знает как создать динамический объект в .Select...

точнее меня интересует примерно следующее:

var RezultForGrid = RezultListCars.Select(cars => new
{
    CarId = cars.Id,
    cPhoto = dc.CarPhotos.Where(p => p.Car_CarPhoto == cars.Id).Select(o => o.Id).Count(), 
    Preselling = cars.PresellingStatus,
    EnginePower = cars.EnginePower.Value,
    Transmission = cars.Transmission,
    CabinType = cars.CabinType,
    CabinColor = cars.CabinColor,
    PurchaseManager = cars.PurchaseManager,
    PresentSale = (dc.SaleOrders.Count(p => p.Car.Id == cars.Id && (p.Status != "Отказ" && p.Status != null)) > 0 ? true : false),                             InSaleDate = cars.InSaleDate.Value
});

всё ясно всё понятно, но к примеру мне заранее известно что поля CarId, cPhoto и ряд других мне не нужны... а к примеру нужно всего два поля... CabinType и CabinColor... но о том нужны они или нет я могу узнать к примеру по условию...

string FieldsList = "CabinType|CabinColor|";
// тогда если можно было бы написать ->
if (FieldsList.Contains("CabinType"))
    CabinType = cars.CabinType,

но так не напишешь... как быть?

Answer 1

C# - язык со строгой типизацией, но в случае необходимости, позволяет использовать динамическую типизацию. Для этого в C# есть тип dynamic. В вашем кокретном случае код для получения коллекции динамически типизированных элементов будет выглядеть примерно так:

var RezultForGrid = new List<dynamic>();
RezultListCars.ToList().ForEach(car => {
     dynamic dynamicObject = new System.Dynamic.ExpandoObject();
     if (FieldsList.Contains("CabinType")) dynamicObject.CabinType = car.CabinType;
     //и так для каждого поля
     RezultForGrid.Add(dynamicObject);
});

В результате в переменной RezultForGrid будут храниться нужные Вам объекты с нужным количеством полей, однако при таком подходе вы не сможете использовать IntelliSense на объектах коллекции. В общем случае трудно, конечно, представить такую ситуацию, когда это нужно, но, как говорится, хозяин-барин:)

READ ALSO
Создание типов на основании XML

Создание типов на основании XML

Допустим, есть некоторая XML конфигурация, в которой можно указать тип и параметры для конструктора и хотелось бы на основании этого создавать...

251
Вывод инфы из массива

Вывод инфы из массива

У меня есть массив:

315
Как проверить значение на ноль php

Как проверить значение на ноль php

Добрый день никак не могу понять почему код неправильно работаетЗначение переменной $data['brand'] может иметь три значения(0, любое число и new)

284
Как вывести картинку из базы данных mysql?

Как вывести картинку из базы данных mysql?

Доброго времени суток! Натягиваю верстку на WP и нужно вывести картинки из бд в слайдер

417