C# 如何铸造IEnumerable的子集合<;T>;到EntityCollection<;T>;?
我使用的是EF,因此我的子集合的类型为EntityCollectionC# 如何铸造IEnumerable的子集合<;T>;到EntityCollection<;T>;?,c#,linq,entity-framework,C#,Linq,Entity Framework,我使用的是EF,因此我的子集合的类型为EntityCollection。如果属性“Children”是EntityCollection,如何将查询结果IEnumerable转换为EntityCollection 谢谢 var list = element.Elements(ns + "Parent") .Select(parsedXml => Children = parsedXml.Elements(ns + "Chil
var list = element.Elements(ns + "Parent")
.Select(parsedXml =>
Children = parsedXml.Elements(ns + "Child")
.Select(child => new Child {
Id = Convert.ToInt32(child.Attribute("id").Value)
})
});
没有直接铸造可用。您需要在集合中循环并添加到新的实体集合中
var eCollection = new EntityCollection<T>();
foreach (var child in list)
{
eCollection.Add(child );
}
var ecocollection=new EntityCollection();
foreach(列表中的变量子项)
{
ecocollection.Add(child);
}
由于您已经在使用LINQ,您可以通过创建扩展方法对同一模型执行此操作:
public static EntityCollection<T> ToEntityCollection<T>(this IEnumerable<T> source)
{
var col = new EntityCollection<T>();
foreach (var item in source)
{
col.Add(item);
}
return col;
}
公共静态EntityCollection到EntityCollection(此IEnumerable源)
{
var col=新的EntityCollection();
foreach(源中的var项)
{
列加(项目);
}
返回列;
}
然后在原始LINQ语句中使用它,将
.ToEntityCollection()
添加到末尾。这是低效的,因为它会在列表中循环两次。@ThomasLeveque我编辑了我的文章;我以前在ienumerable list'list.ToList().foreach(a=>ecocollection.Add(a))上用它代替了foreach代码>