使用字典上的linq join更新列表属性

时间:2015-10-06 07:57:47

标签: c# .net linq

我有自定义列表和字典。

 class HldSS
 {
      string ID
      string IDLong
      string Name
      // other fields
 }

 class SecurityID
 {
      string ID1
      string ID2
      string IDLong
 }

我的列表hldList是

List<HldSS> 

&安培;我的字典dicID是(其中ID1是键值)

Dictionary<string, SecurityID>

我要做的是使用字典填充hldList中的IDLong字段。所以我试着通过在ID字段&amp;上加入我的hldList和dicID来编写一个linq查询来更新我的hldList中的字段IDLong。关键价值。

但是我开始编写下面的查询,我不确定如何继续进行。

List<HldSS> res = from hld in hldList
                      join dic in dicID
                      on hld.ID equals dic.Key

我正在寻找的例子

 hldList                  dicID
 ID     IDLong            ID1     IDLong
 ABC                      ABC     ABC123
 ABC                      LMN     LMN456
 LMN
 PLO
 ABC

结果

 hldList
 ID      IDLong
 ABC     ABC123
 ABC     ABC123
 LMN     LMN456
 PLO
 ABC     ABC123

1 个答案:

答案 0 :(得分:2)

一般情况下,LINQ查询不应该更新某些内容,您必须创建一个新列表。

var query = from hld in hldList
            join dic in dicID
            on hld.ID equals dic.Key
            select new HldSS 
            {
                ID = hld.ID,
                IDLong = dic.Value.IDLong,
                Name = hld.Name,
                // other properties
            };

List<HldSS> res = query.ToList();

如果你想更新原始列表,你必须循环它:

foreach(HldSS h  in hldList)
{
    SecurityID sec;
    if(dic.TryGetValue(h.ID, out sec))
        h.IDLong = sec.IDLong;
}

这也比LINQ查询更有效。