Обновить поле класса в LINQ - возможно ли это? - PullRequest
0 голосов
/ 14 июля 2011

У меня есть 2 таблицы, и я хочу получить записи из 1 таблицы и «обновить» одно из ее полей из другой таблицы, а также передать куда-нибудь окончательный список объектов «Оплата». Я не могу использовать анонимный тип, мне нужно получить список правильных типизированных объектов.

Был долгий путь.

Получил данные:

var paymentsToShow = from p in paymentsRepository.Payments
                     join r in recordTypeRepository.RecordType
                         on p.RecordType equals r.Reference into p_r
                     where p.Customer == CustomerRef
                     from r in p_r.DefaultIfEmpty()
                     select new
                     {
                         Payment = p,
                         RecordType = r
                     };
var objList = paymentsToShow.ToList();

Изменить обязательное поле (в основном, Payment.RecordTypeName пусто):

foreach (var obj in objList)
{
    obj.Payment.RecordTypeName = obj.RecordType.Name;
}

Получил список с правильным типом:

var paymentsList = from o in objList
                   select o.Payment;

Есть ли способ сократить код, внести необходимые изменения в поле в запросе или что-то еще? Я не знаю, где искать. Я не могу изменить базу данных.

1 Ответ

0 голосов
/ 14 июля 2011

Вы можете сделать это следующим образом:

var paymentsToShow = (from p in paymentsRepository.Payments
                      join r in recordTypeRepository.RecordType
                          on p.RecordType equals r.Reference into p_r
                      where p.Customer == CustomerRef
                      from r in p_r.DefaultIfEmpty()
                      select new
                      {
                          Payment = p,
                          RecordType = r
                      }).Select(x =>
                                {
                                    x.Payment.RecordTypeName = x.RecordType.Name;
                                    return x.Payment;
                                });

Это приведет к IEnumerable<Payment>, поэтому анонимный тип не используется.

...