[英]Linq add list inside a list in C#
我正在使用 linq 在父 model 列表中添加子 model 列表。 我得到了父子 model 的结构如下。
public string A { get; set; }
public string B { get; set; }
public IEnumerable<ListItem> Childrens { get; set; }
我设法为我的父母 model 获取了一些数据。
var Parent =
(from c in ExpenseCategorylist
select new ListItem
{
A = c.Key,
B = c.Value,
Childrens = new List<ListItem>()
}).ToList();
现在我要向子 model 添加数据。
foreach(var c in Parent)
{
var child=
(from d in ExpenseTypeList
select new ListItem
{
A = d.Key,
B = d.Value,
Childrens = null,
}).ToList();
c.Childrens.ToList().AddRange(child);
}
我无法更新我的父母 model。 我做错什么了吗?
正如阿列克谢评论的那样
c.Childrens.ToList().AddRange(child);
不会将元素添加到c.Childrens
,而是添加到由.ToList()
创建的 List 中。
为此,您可以执行以下操作:
testA.innerList= testA.innerList.Concat(data).ToList();
((List<int>)testA.innerList).AddRange(data);
有了这个简化 model 例如:
public static void Main()
{
var data = new []{1,2,3,4,5,6};
var testA =
new TestA {
Label="aa",
innerList= new List<int>()
};
///Err: IEnumerable doesn't contains AddRange
//testA.innerList.AddRange(data);
//as Alexey commented
testA.innerList= testA.innerList.Concat(data).ToList();
testA.innerList.Dump();// Test: Works
testA.innerList=new List<int>(); //reset
//Cast
((List<int>)testA.innerList).AddRange(data);
testA.innerList.Dump();// Test: Works
// With extention method
testA.innerList.AddRange(data);
testA.innerList.Dump();// Test: Works
testA.innerList=new List<int>(); //reset
}
public class TestA{
public string Label {get; set;}
public IEnumerable<int> innerList {get; set;}
}
如果在 IEnumerable / ICollection / IList 上添加范围,您可以考虑在 IEnumerable 上编写扩展方法。
public static void AddRange<T>(this IEnumerable<T> collection, IEnumerable<T> items)
{
((List<T>)collection).AddRange(items);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.