将两个列表数据合并到单个列表C#中

时间:2015-05-04 04:58:10

标签: c# linq

所以我使用linq跟随两个列表。

List<One> one= A.Common
               .Join(B.Common,
                a => a.ID,
                b=> b.ID,
                (a, b) => new One
                {
                  ID = b.PID,
                  Name = b.PCName,
                  LastName = a.LName
                }).ToList();

List<One> two = (from c in D.Options
                 select new One
                 {
                   MainName = c.mName
                 }).ToList(); 

 List<One> sn = one.Concat(two).ToList();

我正在整理这两个清单。但是当我调试时,我在sn list中将MainName称为null。

如何从单个列表中的两个列表中获取数据?

3 个答案:

答案 0 :(得分:3)

您就是这样做的:

var sn = one.Zip(two, (x, y) => new One{
  ID = x.ID,
  Name = x.Name,
  LastName = x.LastName,
  MainName = y.MainName
});

答案 1 :(得分:0)

您希望为列表ONE 中的所有列表值分配MainName属性吗?

从上面开始,代码连接将连接两个列表,并且不会为列表一个元素设置MainName。

          <?php
             $hashedpassword = crypt("james");

             /*echo $hashedpassword;
            */
           if (password_verify('james', $hashedpassword)) {
              echo 'Password is valid!';
           } else {
              echo 'Invalid password.';
           }
        ?>

上面的行只会将两个列表连接到一个列表元素。

答案 2 :(得分:0)

您可以使用LINQ ConcatToList方法:

var mergedList = YourFirstList.Concat(YourSecondList)
                    .Concat(YourThirdList)
                    .ToList();

编辑:

one.Concat(two).Select(g => g.Aggregate((p1,p2) => new One 
{
    ID = p1.ID,
    Name = p1.PCName, 
    LastName = p1.LName,
    MainName = p2.mName
}));

更有效的方法 - 上面将基本循环遍历所有条目,创建一个动态大小的缓冲区。

var mergedList = new List<One>(YourFirstList.Count +
                               YourSecondList.Count +
                               YourThirdList.Count);
mergedList.AddRange(YourFirstList);
mergedList.AddRange(YourSecondList);
mergedList.AddRange(YourThirdList);

special-cased的{​​{1}}用于提高效率。

您可以使用ICollection<T>方法。

Zip