2010-03-02 12 views
23

¿Cómo convertir o emitir un List<T> al EntityCollection<T>?convertir o emitir una lista <t> a EntityCollection <T>

A veces esto ocurre cuando se trata de crear 'desde cero' una colección de objetos secundarios (por ejemplo, de un formulario web)

 Cannot implicitly convert type 
'System.Collections.Generic.List' to 
'System.Data.Objects.DataClasses.EntityCollection'

Respuesta

28

Asumo que está hablando List<T> y EntityCollection<T> que es utilizado por el marco de la entidad . Como este último tiene un objetivo completamente diferente (es responsable del seguimiento de cambios) y no hereda List<T>, no hay conversión directa.

Puede crear un nuevo EntityCollection<T> y agregar todos los miembros de la lista.

var entityCollection = new EntityCollection<TEntity>(); 
foreach (var item m in list) 
{ 
    entityCollection.Add(m); 
} 

Desafortunadamente EntityCollection<T> no apoya una operación Asignar al igual que EntitySet utilizado por Linq2Sql ni un constructor sobrecargado así que ahí es donde uno se queda con lo que he dicho anteriormente.

+0

El objeto no se pudo agregar a EntityCollection o EntityReference. Un objeto que está adjunto a un ObjectContext no se puede agregar a una EntityCollection o EntityReference que no esté asociada con un objeto de origen. Recibí este error – alice7

+0

Esto no tiene nada que ver con la pregunta en sí, sino que está más relacionado con su situación específica. ¿No crees que es un mensaje de error muy descriptivo? –

+0

Este es el mensaje de error exacto que obtuve al usar su sugerencia. – alice7

14

En una línea:

list.ForEach(entityCollection.Add); 

método de extensión:

public static EntityCollection<T> ToEntityCollection<T>(this List<T> list) where T : class 
{ 
    EntityCollection<T> entityCollection = new EntityCollection<T>(); 
    list.ForEach(entityCollection.Add); 
    return entityCollection; 
} 

Uso:

EntityCollection<ClassName> entityCollection = list.ToEntityCollection(); 
+4

En una línea aún más corta, 'list.ForEach (entityCollection.Add);' – AakashM

0

requiere LINQ. Simplemente llame al the constructor

List<Entity> myList = new List<Entity>(); 
EntityCollection myCollection = new EntityCollection(myList); 
Cuestiones relacionadas