C sharp - Acceder a una propiedad de un objeto genérico T

   
Vista:

Acceder a una propiedad de un objeto genérico T

Publicado por Gh00sT (2 intervenciones) el 20/07/2016 16:56:40
Buenas tardes, tengo un método genérico de acceso a datos, me devuelve una lista. El problema es que como no se el objeto que le voy a pasar, no puedo filtrar. Lo que quiero hacer es si el objeto tiene la propiedad "CodigoEmpresa" entonces lo filtro. Aquí el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public virtual IList<T> GetList(Func<T, bool> where,
             params Expression<Func<T, object>>[] navigationProperties)
        {
            List<T> list;
            using (var context = new DaniClassEntities())
            {
                IQueryable<T> dbQuery = context.Set<T>();
                foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
                    dbQuery = dbQuery.Include<T, object>(navigationProperty);
 
                /* Si el objeto T contiene la propiedad 'CodigoEmpresa' ejecutar la siguiente linea */
                dbQuery = dbQuery.Where(c => c.CodigoEmpresa == 10); //Error de compilación
 
                list = dbQuery
                    .AsNoTracking()
                    .Where(where)
                    .ToList<T>();
            }
            return list;
        }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Santos Pairazaman Flores

Acceder a una propiedad de un objeto genérico T

Publicado por Santos Pairazaman Flores (1 intervención) el 20/07/2016 23:30:39
Esta función te devuelve valor de la propiedad si existe.

1
2
3
4
5
Function GetProperty(ByVal control As Object, ByVal propertyName As String) As String
        Dim propInfo As PropertyInfo = control.[GetType]().GetProperty(propertyName)
        Dim value As String = propInfo.GetValue(control, Nothing)
        Return value
End Function

La utilice para mostrar un reporte personalizado.

La llamada sería de esta manera:
1
rw(dr.ColumnName) = GetProperty(oAcuerdoEntity, dr.ColumnName)

Donde :
rw es un datarow
oAcuerdoEntity es una entidad
dr es un DataColumn de un datatable.

Espero te sirva y lo puedas adaptar a tus necesidades.

En este link puedes convertir el code VB a C# y viciversa.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

Acceder a una propiedad de un objeto genérico T

Creo que no entiendes esa funcionalidad, normalmente eso es para un repositorio, y como deberías invocarlo sería mas o menos así:

Repositorio repositorio=new Repositorio();

var loquebuscas=repositorio.GetList<Entidad>(x=>x.CodigoEmpresa==10).ToList();

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Acceder a una propiedad de un objeto genérico T

Publicado por Gh00sT (2 intervenciones) el 25/07/2016 09:19:22
Si entiendo esa funcionalidad, lo que quiero es no tener que pasar siempre (x=>x.CodigoEmpresa==10) que el propio método del repositorio si la entidad contiene la propiedad CodigoEmpresa la filtre ya que algunas tablas de mi base de datos tienen ese campo y otras no, pero si lo tienen siempre tiene que filtrar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

Acceder a una propiedad de un objeto genérico T

Lo que pretendes deja de ser genérico, por eso te decía creo que no entendiste en todo caso el concepto, si es algo genérico, no puedes buscar una propiedad específica, hasta que no le hayas pasado la entidad y recién sabrá de quien se trata y que propiedades tiene.

En todo caso eso lo podrías implementar en tus reglas de negocio y no en el repositorio.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar