Tengo una matriz de ListViewItems (ListViewItem[]
), donde almaceno un objeto SalesOrderMaster
en cada ListViewItem.Tag para referencia futura.¿Cómo puedo convertir el tipo anónimo a tipo fuerte en LINQ?
Tengo un código que en este momento, cada ListViewItem
arroja con seguridad la propiedad .Tag en un objeto SalesOrderMaster, luego agrega ese objeto a una colección de SalesOrders, solo después de verificar para asegurarse de que el pedido no exista ya en esa colección.
El proceso para comparar pedidos de venta es costoso, y me gustaría convertir esto a una expresión LINQ para mayor claridad y rendimiento. (También tengo el Parallel Extensions to .NET Framework 3.5 instalado, así que puedo usar eso para mejorar aún más el rendimiento de LINQ)
Sin más preámbulos: Esto es lo que tengo, y luego lo que quiero. (Lo que yo quiero no se compilará, así que sé que estoy haciendo algo mal, pero espero que ilustra este punto)
Lo que tengo: (Slow)
foreach (ListViewItem item in e.Argument as ListViewItem[])
{
SalesOrderMaster order = item.Tag as SalesOrderMaster;
if (order == null)
{
return;
}
if (!All_SalesOrders.Contains(order))
{
All_SalesOrders.Add(order);
}
}
Lo que quiero: (Teoría)
List<SalesOrderMaster> orders =
(from item in (e.Argument as ListViewItem[]).AsParallel()
select new { ((SalesOrderMaster)item.Tag) }).Distinct();
EDIT: sé que el reparto es barato, me dijo que el "comparar", que en este caso se traduce en los .Contains (orden) la operación
EDIT: la respuesta de todo el mundo era increíble! Desearía poder marcar más de una respuesta, pero al final tengo que elegir una.
EDIT: Esto es lo que terminó con:
List<SalesOrderMaster> orders =
(from item in (e.Argument as ListViewItem[]) select (SalesOrderMaster) item.Tag).GroupBy(item => item.Number).Select(x => x.First()).ToList();
+1 para obtener información sobre 'new {}' –
@ [Lucas] Pero, ¿cómo podemos seleccionar varios campos usando este método? ¿Hay alguna alternativa al uso de un tipo anónimo? – Zesty
Ah, no importa, lo tengo. seleccione nueva Persona (e.First_name, e.Last_name)). ToList() –
Zesty