Метод расширения для UPDATE в Linq to Objects - PullRequest
1 голос
/ 28 августа 2009

В следующем сценарии я запрашиваю объект List и для соответствующего предиката хочу обновить некоторые значения:

var updatedList = MyList
                 .Where (c => c.listItem1 != "someValue")  
                 .Update (m => {m.someProperty = false;});

Единственная проблема в том, что нет способа расширения расширения. Как это сделать?

Моя цель - обновить только те элементы в моем списке, которые соответствуют условию, оставив другие элементы без изменений.

Ответы [ 3 ]

8 голосов
/ 28 августа 2009
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var people = new List<Person> {
                new Person{Name="aaa", Salary=15000, isHip=false}
                ,new Person{Name="aaa", Salary=15000, isHip=false}
                ,new Person{Name="bbb", Salary=20000, isHip=false}
                ,new Person{Name="ccc", Salary=25000, isHip=false}
                ,new Person{Name="ddd", Salary=30000, isHip=false}
                ,new Person{Name="eee", Salary=35000, isHip=false}
            };


            people.Where(p => p.Salary < 25000).Update(p => p.isHip = true);

            foreach (var p in people)
            {
                Console.WriteLine("{0} - {1}", p.Name, p.isHip);
            }


        }
    }

    class Person
    {

        public string Name { get; set; }
        public double Salary { get; set; }
        public bool isHip { get; set; }
    }


    public static class LinqUpdates
    {

        public static void Update<T>(this IEnumerable<T> source, Action<T> action)
        {
            foreach (var item in source)
                action(item);
        }

    }


}
4 голосов
/ 21 июля 2010

Или вы можете использовать метод расширения, который поставляется с .Net framework:

var updatedList = MyList
                 .Where (c => c.listItem1 != "someValue")  
                 .ForEach(m => m.someProperty = false);
1 голос
/ 28 августа 2009
foreach(var item in MyList.Where(c => c.listItem1 != "someValue"))
{
    item.someProperty = false;
}
...