开发者

Update class field in LINQ - is it possible?

开发者 https://www.devze.com 2023-03-20 01:17 出处:网络
I have 2 tables, and want to get records from 1 table and to \"update\" one of its fields from another table, and to pass final list of \"Payment\" objects somewhere. I cannot use anonymouse type, i n

I have 2 tables, and want to get records from 1 table and to "update" one of its fields from another table, and to pass final list of "Payment" objects somewhere. I cannot use anonymouse type, i need to get the list of proper typed objects.

There was a long way.

Got data:

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

Change required field (basically, Payment.RecordTypeName is empty):

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

Got list with correct type:

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

Is there any way to get code shorter, to make required field update in the query or something else? I dont know where to look for. I cannot change database.


You could do it like this:

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;
                                });

This will result in an IEnumerable<Payment>, so no anonymous type used.

0

精彩评论

暂无评论...
验证码 换一张
取 消