开发者

Using LINQ to Update A Property in a List of Entities

开发者 https://www.devze.com 2022-12-12 07:25 出处:网络
Say I have an entity that looks something like this simple example: MyEntity { int property1; int property2;

Say I have an entity that looks something like this simple example:

MyEntity 
{
   int property1;
   int property2;
   int property3;
}

Now assume I have an IEnumerable list of these entite开发者_运维知识库s. Is there a LINQ query I can execute that would set the value of property1 to 100 for each entity in the list? I know I can do this via a foreach, but was wondering if LINQ could do this more elegantly.


Like this:

var result = GetMyIEnumerable()
                .ToList();
result.ForEach(x => x.property1 = 100);


Here are two solutions that I found that worked for me.

result = result.Where(x => (x.property1 = 100) == 100).ToList();

or

result = result.Select(c => { c.property1 = 100; return c; }).ToList();


To Darin's point, LINQ is built for querying. I've gotten into the mindset when working with LINQ that objects being queried should be treated as immutable. However, the Select operator is also great for transformations.

So, you could solve your problem by transforming from one set to another as follows:

var result = myEntityCollection.Select(e => {
   var ret = e;
   e.property1 = 100;
   return e; });

The items in the original collection are untouched, but the items in result will now all have property1 set to 100.


If you have 100 properties maybe reflection would be most elegant. LINQ's for querying not updating.


In addition to Darrelk and mkedobbs, VB.NET Code:

object.list =
    object.list.Select(Function(x)
                           x.property = If(x.property.Length > 3, x.property.Substring(0, 3), x.property)
                           Return x
                       End Function).ToList()
0

精彩评论

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