2016-07-14 3 views
-1

У меня есть два списка (lišta и LISTB) следующего сильного типа данных:Установить конкретное значение одного списка из другого

public class TagPresenter 
    {  
     public string TagName { get; set; } 
     bool IsEnable { get; set; }  
     public string TagId { get; set; } 
    } 

Мне нужно установить IsEnable lišta к истинным, когда элемент LISTB является найден в lišta. И это сравнение должно произойти на TagId. A имеет все элементы, которые имеет B. Короче, если B имеет 3 элемента, а A имеет 10, тогда в этом случае мне нужно свойство IsEnable для true в ListA для всех этих 3 элементов. Мне нужно сделать это в LINQ.Kindly help.

+4

«Мне нужно сделать это в LINQ». Зачем? Linq для _querying_, а не _updating_. –

+0

@DStanley, его также можно использовать для обновления ... – GreatAndPowerfulOz

+1

@ Great.And.Powerful.Oz Действительно? Что-то вроде 'update ListA set ListA.IsEnable = true где ...' - oops, это SQL :) –

ответ

3

Обновление в Linq очень грязно - это более идиоматических использовать Linq для поиска совпадений, но обновлять их с foreach

var query = 
    from a in listA 
    join b in listB on a.TagId equals b.TagId 
    select a 
    ; 

foreach(var a in query) 
{ 
    a.IsEnable = true; 
} 
+0

Я забыл упомянуть, что мне нужно, чтобы результат в ListA отражался. Будем ли над куском кода делать это? – Chanchal

+1

Что вы подразумеваете под «отражением»? Если вы имеете в виду изменения, которые будут отображаться при перечислении «ListA», тогда да, так как запрос возвращает _references_ к объектам из списка. –

0

Попробуйте

var query = 
    from a in listA 
    join b in listB on a.TagId equals b.TagId 
    select new TagPresenter 
    {  
     TagName = a.TagName, 
     IsEnable = true, 
     TagId = a.TagId 
    }; 
1

Это мой первый пост, так что если Я ошибаюсь, извините, и извините за мой английский.

ниже код, чтобы обновить свойство списка уже загруженный в памяти с помощью Linq:

Добавить класс =>

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

после:

ListA.UpdateAll(p => p.Property = Value); 

или

ListA.Where(p => p.Id = 1).UpdateAll(p => p.Property = Value); 
Смежные вопросы