2009-07-25 15 views
7

Tengo una clase "Empleado", esta tiene un IList <> de "TypeOfWork".Comprueba si un valor está en una colección con LINQ

public class Employee 
{ 
    public virtual IList<TypeOfWork> TypeOfWorks { get; set; } 
} 

public class TypeOfWork 
{ 
    public virtual Customer Customer { get; set; } 

    public virtual Guid Id { get; set; } 
    public virtual string Name{ get; set; } 
    public virtual bool IsActive{ get; set; } 
} 

antes de guardar, me gustaría saber si Lile "typeofwid" (un GUID) ya está en la colección "TypeOfWorks".

yo probamos este:

var res = from p in employee.TypeOfWorks 
      where p.Id == new Guid("11111111-1111-1111-1111-111111111111") 
      select p ; 

y probamos este:

bool res = employee.TypeOfWorks.Where(f => f.Id == new Guid("11111111-1111-1111-1111-111111111111")).Count() != 0; 

en la "Ventana inmediata" de Visual Studio, pero recibo el error: expresión no puede contener consulta expresiones tanto caso

¿Tiene una idea?

Gracias,

Respuesta

19

Justo lo que dice el error. No puede usar consultas LINQ en la ventana Inmediato porque requieren la compilación de funciones lambda. Pruebe la primera línea en su código actual, donde se puede compilar. :)

Además, para obtener esta todo hecho en una línea, se puede utilizar el LINQ "Cualquier" operador, así:

if(! employee.TypeOfWorks.Any(tow => tow.Id == theNewGUID)) 
    //save logic for TypeOfWork containing theNewGUID 
0

Yo creo que ninguno de los trabajos, en realidad. Tenga en cuenta que Visual Studio no puede manejar consultas de Linq en la ventana del reloj tampoco, por lo que sospecho que el error que usted vio es más un problema de Visual Studio que el código que no funciona.

0

Pruebe este código para obtener el conteo de typeofwork no inicializado.

if(employee.TypeOfWorks 
    .Count(f => f.Id != new Guid("11111111-1111-1111-1111-111111111111")) != 0) 
{ 
    //do something 
} 
1

¿qué tal

Guid guid = Guid.NewGuid("11111111-1111-1111-1111-111111111111"); 
var res = from p in employee.TypeOfWorks 
      where p.Id == guid 
      select p ; 

The problem is constructing the guid - otherwise the linq queries should work 
Cuestiones relacionadas