Linq обновление с присоединением - PullRequest
0 голосов
/ 28 июня 2018

У меня есть две коллекции

var materials = new List<Models.Material>();
materials.Add(new Models.Material { Number = 111, Value = null });
materials.Add(new Models.Material { Number = 222, Value = null });

var db_materials = new List<Models.DB_Material>();
db_materials.Add(new Models.DB_Material { Number = 111, ValueColumn = 10});
db_materials.Add(new Models.DB_Material { Number = 222, ValueColumn = 20 });
db_materials.Add(new Models.DB_Material { Number = 333, ValueColumn = 30 });
db_materials.Add(new Models.DB_Material { Number = 444, ValueColumn = 40 });

и мне нужно обновить все значения свойств в материалах коллекции с ValueColumn в db_materials коллекции.

Как это сделать?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Вот это без объединения:

  materials =  materials.Select(c => { c.Value = db_materials.Where(dbm => dbm.Number == c.Number).ToList().FirstOrDefault().Value; return c; }).ToList();
0 голосов
/ 28 июня 2018

Я протестировал следующий код, и он работает

            var joins = from material in materials
                        join db_material in db_materials on material.Number equals db_material.Number
                        select new { material = material, db = db_material};

            foreach (var join in joins)
            {
                join.material.Value  = join.db.ValueColumn;
            }
0 голосов
/ 28 июня 2018

Вы также можете сделать это без объединений. Попробуйте приведенный ниже фрагмент:

materials.ForEach(x => x.Value = db_materials.FirstOrDefault(y => y.Number == x.Number).ValueColumn);

ForEach () обновит значения в самом оригинальном экземпляре. Нет необходимости использовать цикл или соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...