C# 如何铸造IEnumerable的子集合<;T>;到EntityCollection<;T>;?

C# 如何铸造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

我使用的是EF,因此我的子集合的类型为EntityCollection。如果属性“Children”是EntityCollection,如何将查询结果IEnumerable转换为EntityCollection

谢谢

 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