2012-02-02 20 views
5

Por alguna razón no puedo cambiar la consulta, así que tengo que hacer esto en C#.Eliminar una propiedad/columna de una lista genérica

tengo una clase:

public class myClass 
{ 
    int id { get; set; } 
    string name { get; set; } 
    DateTime sDate { get; set; } 
    bool status { get; set; } 
} 

Los datos que estoy recibiendo es exagerado en esta lista. Ahora lo que quiero es eliminar esas propiedades de una lista que tiene valores de null. Puede sonar loco, pero lo leíste bien. Pensé en crear otra lista con solo las propiedades seleccionadas, pero cualquiera de las propiedades anteriores puede ser null. Así que tengo que diseñar un mecanismo para filtrar mi lista en base a esto.

Para mayor claridad, considere el siguiente ejemplo.

List<myClass> lstClass = some data source. 

Después de obtener los datos de la lista genérica (lstClass) parece this.Consider el conjunto de resultados en una tabla:

Id Name Sdate status 
1 a null null 
2 b null null 
3 c null false 

¿Puedo hacer que de alguna forma mi lista se parece a esto después de la eliminación de la propiedad fechar Así que la nueva lista que quiero crear solo debe tener tres propiedades.

Id Name status 
1 a null 
2 b null 
3 c false 

¿Alguna idea? ¿Puedo hacer esto usando Linq?

PD: Esto no tiene nada que ver con la presentación. No tengo una cuadrícula donde no puedo ocultar columnas que no es lo que estoy buscando.

+1

Su pregunta es poco clara, no es del todo obvio de qué tipo de lista está hablando como resultado. También ayudaría si hiciera que su código de C# fuera válido y lo hiciera seguir las convenciones de nomenclatura de .NET. –

+1

Seguramente, esto tiene más que ver con la forma en que se muestran los datos dados, a diferencia de los datos que tiene? –

+0

Voy a editar la publicación, con respecto a la convención de nomenclatura, he preparado un ejemplo ficticio para reflejar el escenario. – ankur

Respuesta

15

Asumiendo que tiene una lista genérica de casos miClase, puede crear un tipo anónimo con sólo las propiedades necesarias:

List<myClass> list = ...; 
var reducedList = list.Select(e => new {e.id, e.name, e.status}).ToList(); 
// note: call to ToList() is optional 

foreach (var item in reducedList) 
{ 
    Console.WriteLine(item.id + " " + item.name + " " + item.status); 
    //note: item does not have a property "sDate" 
} 
+2

+1 tipos anónimos para rescatar. –

+2

@ M4N pero no sé qué columna estará en blanco, así que no puedo cablearlo. ¿Puedes dar un ejemplo en el que primero determines el fragmento del nombre de la columna que se debe pasar en una clase anónima? – ankur

0

No estoy seguro de que debe resolver su problema en los datos, sino que de un problema de presentación. ¿En qué control desea visualizarlo? Digamos que lo muestra en DataGrid con AutoGenerateColumns = True, luego puede 1) crear un bucle en las columnas/propiedades 2) para cada columna/propiedad ver si todos los valores de propiedad para todas las filas son nulos y, de ser así, establecer la visibilidad de la columna en Plegado. Si genera sus columnas usted mismo es aún más simple: solo agregue columnas cuando el contenido no sea nulo para todas las filas.
Si su contenido de base de datos es dinámico, es posible que desee vincular la visibilidad de cada fila a una propiedad que indique si todas las filas son nulas o no para esa propiedad. Dependiendo de cuán genérico desee que sea su código, el código puede ser muy diferente, y en caso de que quiera tener una solución genérica, puede ser útil usar Reflection para recuperar/obtener/establecer propiedades.

+0

no, este no es el caso. – ankur

+0

su capacidad de escuchar los consejos de otras personas para llegar a una solución es bastante impresionante. – GameAlchemist

Cuestiones relacionadas