c#中两个列表的连接
本文关键字:两个 列表 连接 | 更新日期: 2023-09-27 18:08:56
public class Co
{
public int Id { get; set; }
public string Title { get; set; }
public List<string> Cards { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Co> coll = new List<Co>();
Co c1 = new Co();
c1.Id = 1;
c1.Title = "A";
coll.Add(c1);
Co c2 = new Co();
c2.Id = 2;
c2.Title = "B";
coll.Add(c2);
List<KeyValuePair<int, int>> list = new List<KeyValuePair<int, int>>();
list.Add(new KeyValuePair<int, int>(1, 2));
list.Add(new KeyValuePair<int, int>(1, 3));
list.Add(new KeyValuePair<int, int>(1, 1));
list.Add(new KeyValuePair<int, int>(2, 1));
Console.ReadKey();
}
我想通过比较coll
中对象的id与list
中的键,为coll
中的所有对象分配Cards属性,并使用逗号分隔list
中的值
输出:对于第一个对象c.Cards ="2,3,1"对于第二个对象c.cards= "1"
我可以用foreach循环来做。谁能告诉我linq的解决方法?
首先,注意您的示例数据不正确,因为您两次使用了相同的c
对象。它应该是这样的:
List<Co> coll = new List<Co>();
Co c = new Co();
c.Id = 1;
c.Title = "A";
coll.Add(c);
c = new Co(); // HERE
c.Id = 2;
c.Title = "B";
coll.Add(c);
List<KeyValuePair<int, int>> list = new List<KeyValuePair<int, int>>();
list.Add(new KeyValuePair<int, int>(1, 2));
list.Add(new KeyValuePair<int, int>(1, 3));
list.Add(new KeyValuePair<int, int>(1, 1));
list.Add(new KeyValuePair<int, int>(2, 1));
现在,请注意您的Cards
属性是List<string>
,而不是string
,所以我不知道您所说的"逗号分隔值"是什么意思。如果Cards
是字符串:
coll.ForEach(co => co.Cards = String.Join(",",
list.Where(l => l.Key == co.Id)
.Select(l => l.Value)));
当前定义为List<string>
:
coll.ForEach(co => co.Cards =
list.Where(l => l.Key == co.Id)
.Select(l => l.Value.ToString()).ToList()
);