whereselectlistiterator wherelistiterator tipos tipo puede otros objeto metodos listas convertir c# linq entity-framework

c# - tipos - no se puede convertir un objeto de tipo wherelistiterator



No se pueden comparar elementos de tipo ''System.Collections.Generic.ICollection`1 Solo se admiten tipos primitivos, tipos de enumeraciĆ³n y tipos de entidades (5)

El campo de colección puede ser nulo en este caso, se obtiene la excepción NullReferenceException

cuando use RelatedTables.Any()

Si agrega RelatedTables != null como en una pregunta, puede obtener

No se pueden comparar elementos del tipo ''System.Collections.Generic.ICollection`1 [[Project1, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]]''. Sólo se admiten tipos primitivos, tipos de enumeración y tipos de entidad.

Si obtiene la excepción NullReferenceException , la carga diferida no se desactiva y está bien con la carga diferida para el campo, para evitar el campo de marca de excepción con virtual palabra clave virtual para permitir la carga diferida para el campo

virtual ICollection<Table> RelatedTables{ get; set; }

He escrito este codigo

IQueryable<Site> sites = context.MainTable.Include("RelatedTable"); if (!string.IsNullOrEmpty(param1)) { sites = sites.Where(s => s.RelatedTable != null && s.RelatedTable.Any(p => p.Name == param1.ToLower() && p.PolicyType == "primary")); } foreach (string secondaryPolicy in secondaryPolicies) { sites = sites.Where(s => s.RelatedTable != null && s.RelatedTable.Any(p => p.Name == secondaryPolicy.ToLower() && p.PolicyType == "secondary")); } return sites.ToList();

Sin embargo, en la línea ToList estoy recibiendo la excepción

No se pueden comparar elementos del tipo ''System.Collections.Generic.ICollection`1 [[Project1, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]]''. Sólo se admiten tipos primitivos, tipos de enumeración y tipos de entidad.


El error puede ocurrir si la colección de navegación se compara con null. Debe comprobarse si existe algún registro. En el ejemplo particular, Any se usa de todos modos, por lo tanto, verificar que la recopilación sea nula es redundante

Incorrecto

dbContext.MainTable.Where(c => c.RelatedTable==null )

Correcto

dbContext.MainTable.Where(c => !c.RelatedTable.Any() )


Es porque tienes un cheque nulo en la cláusula where.


Me funciona, acabo de quitar el cheque nulo;

correcto: resultado =

db.EmpTable.FirstOrDefault().ProjectsAssign.Name,

InCorrect: resultado =

db.EmpTable!=null && db.EmpTable.FirstOrDefault().ProjectsAssign!=null ? db.EmpTable.FirstOrDefault().ProjectsAssign.Name : null,


No se puede comparar una tabla relacionada con null directamente. En su lugar, compare con su miembro de clave externa (suponiendo que la PrimaryTable RelatedTable PrimaryTable referencia a la RelatedTable utilizando un miembro llamado RelatedTableId .

sites.Where(s => s.RelatedTableId != null && s.RelatedTable.Any( p => p.Name == param1.ToLower() && p.PolicyType == "primary"));

Incluso puede salirse con la eliminación de la comprobación nula por completo. Dado que esta consulta se ejecuta en la base de datos, no obtendrá una NullReferenceException y puede funcionar. Sin embargo, tendrás que verificar eso.