2016-07-14 52 views
-1

一个列表的特定值我有以下强大的数据类型的两个列表(listA的和数组listB):设置从另一个

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

我需要在数组listB的项目在利斯塔发现利斯塔的IsEnable设置为true。这个比较应该在TagId上发生。 A拥有B拥有的所有项目。所以简而言之,如果B有3个项目,而A有10个,那么在那种情况下,我需要ListA中的IsEnable属性为true来表示所有这3个项目。我需要在LINQ中做到这一点。善良的帮助。

+4

“我需要在LINQ中执行此操作。”为什么? Linq是为_querying_,而不是_updating_。 –

+0

@DStanley,它也可以用于更新... – GreatAndPowerfulOz

+1

@ Great.And.Powerful.Oz真的吗?就像'update ListA set ListA.IsEnable = true where ...' - 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);