2010-04-17 17 views
68

tengo el siguiente método:IEnumerable no tiene un método Count

public bool IsValid 
{ 
    get { return (GetRuleViolations().Count() == 0); } 
} 

public IEnumerable<RuleViolation> GetRuleViolations(){ 
    //code here 
} 

¿Por qué es que cuando hago .Count() por encima de ella está subrayada en rojo?

me dieron el siguiente error:

Error 1 'System.Collections.Generic.IEnumerable' does not contain a definition for 'Count' and no extension method 'Count' accepting a first argument of type 'System.Collections.Generic.IEnumerable' could be found (are you missing a using directive or an assembly reference?) c:\users\a\documents\visual studio 2010\Projects\NerdDinner\NerdDinner\Models\Dinner.cs 15 47 NerdDinner

+0

Tenía el mismo problema. Por algún motivo, no puede hacer clic con el botón derecho y elegir "Resolver ..." para solucionarlo :( – micahhoover

+0

Suspiro! Tengo System.Linq incluido pero sigo recibiendo este error. (Aunque el mensaje de error nombra la primera arg como " System.Linq.IQueryable ".) –

Respuesta

141

Se agrega:

using System.Linq; 

en la parte superior de su fuente y asegúrese de que usted tiene una referencia al ensamblado System.Core.

Count() es un método de extensión proporcionado por la clase estática System.Linq.Enumerable para LINQ to Objects y System.Linq.Queryable para LINQ to SQL y otros proveedores fuera de proceso.

EDITAR: De hecho, usar Count() aquí es relativamente ineficiente (al menos en LINQ para objetos). Todo lo que desea saber es si hay elementos o no, ¿no? En ese caso, Any() es un mejor ajuste:

public bool IsValid 
{ 
    get { return !GetRuleViolations().Any(); } 
} 
+0

Si esta referencia le da un error, verifique que el Marco de objetivos de su proyecto (en las propiedades del proyecto, pestaña Aplicación) esté configurado en .NET Framework 3.5 o 4. Los métodos de extensión no funcionarán. en 2.0 o anterior. – willvv

+1

He tenido el uso de System.Linq; pero no resuelve mi problema ... ¿cómo puedo asegurarme de que obtuve una referencia al ensamblado System.Core? – aherlambang

+0

Target framework es .NET Framework 4 – aherlambang

2

IEnumeration no tiene un método llamado Count(). Es solo una especie de "secuencia de elementos". Use por ejemplo List si necesita explícitamente la cantidad de elementos. Si utiliza Linq tenga en cuenta que el método de extensión Count() puede volver a contar el número de elementos cada vez que lo llame.

0

¿Qué tal:

public bool IsValid 
{ 
    get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); } 
} 
1

Any() o Count() métodos de LINQ funcionan sólo para los tipos genéricos.

IEnumerable<T> 

Si usted tiene un simple IEnumerable sin un tipo, trate de usar

IEnumerable<object> 

lugar.

Cuestiones relacionadas