/ / BindingList y LINQ? - c #, .net, linq, .net-3.5, c # -3.0

BindingList y LINQ? - c #, .net, linq, .net-3.5, c # -3.0

Soy nuevo en Linq y me gustaría ordenar algunos datos que están en la lista de enlaces. Una vez que hice mi consulta Linq, necesito volver a usar la colección BindingList para enlazar mis datos.

 var orderedList = //Here is linq query
return (BindingList<MyObject>)orderedList;

Esta compilado pero falla en su ejecución, ¿cuál es el truco?

Respuestas

17 para la respuesta № 1
new BindingList<MyObject>(orderedList.ToList())

3 para la respuesta № 2

No se puede convertir cualquier tipo de colección en ninguna otra colección. En términos de cuándo el compilador comprueba la conversión, consulte esta publicación en Casting en tiempo de compilación vs tiempo de ejecución

Sin embargo, puede producir fácilmente un BindingList de un enumerable haciendo algunas de las cañerías a ti mismo. Simplemente agregue el siguiente Método de Extensión a cualquier tipo Enumerable para convertir la colección en una BindingList.

DO#:

static class ExtensionMethods
{
public static BindingList<T> ToBindingList<T>(this IEnumerable<T> range)
{
return new BindingList<T>(range.ToList());
}
}

//use like this:
var newBindingList = (from i in new[]{1,2,3,4} select i).ToBindingList();

VB:

Module ExtensionMethods
<Extension()> _
Public Function ToBindingList(Of T)(ByVal range As IEnumerable(Of T)) As BindingList(Of T)
Return New BindingList(Of T)(range.ToList())
End Function
End Module

"use like this:
Dim newBindingList = (From i In {1, 2, 3, 4}).ToBindingList()

2 para la respuesta № 3

Eso de arriba solo funciona cuando tu consulta de linq "sLa proyección select se escribe explícitamente como MyObject en lugar de seleccionar new, lo que crea una instancia de un objeto anónimo. En tales casos, el tipo de (orderList.ToList ()) termina como algo similar a esto: System.Collections.Generic.List <<> f__AnonymousType1>

es decir: esto debería funcionar:

var result = (from x in MyObjects
where (wherePredicate( x ))
select new MyObject {
Prop1 = x.Prop1,
Prop2 = x.Prop2
}).ToList();
return new BindingList<MyObject>( result );

esto no va a

var result = from x in db.MyObjects
where(Predicate(x))
select new {
Prop1 = x.Prop1
Prop2 = x.Prop2
};
return new BindingList<MyObject>(result.ToList())
//creates the error: CS0030 "Cannot convert type "AnonymousType#1" to "MyObject"

En el segundo caso, typeof (resultado) es: System.Collections.Generic.List <<> f__AnonymousType2> (los parámetros de tipo coinciden con las propiedades establecidas en su proyección seleccionada)

referencia: http://blogs.msdn.com/swiss_dpe_team/archive/2008/01/25/using-your-own-defined-type-in-a-linq-query-expression.aspx