2009-07-25 17 views
7

Ho una classe "Dipendente", questo ha un IList <> di "TipoOfWork".Verificare se un valore è in una raccolta 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; } 
} 

prima di salvare, mi piacerebbe Lile sapere se "typeofwid" (un Guid) è già presente nella collezione "TypeOfWorks".

ho provato questo:

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

e provato questo:

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

nella "finestra immediata" di Visual Studio, ma ricevo l'errore: espressione non può contenere espressioni di query sia case

Avete un'idea?

Grazie,

risposta

19

Proprio quello che dice l'errore. Non è possibile utilizzare le query LINQ nella finestra immediata perché richiedono la compilazione di funzioni lambda. Prova la prima riga del tuo codice attuale, dove può essere compilato. :)

Inoltre, per ottenere questo tutto fatto in una sola riga, è possibile utilizzare il LINQ "Qualsiasi" operatore, in questo modo:

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

Credo che uno di questi lavori, in realtà. Tieni presente che Visual Studio non è in grado di gestire le query di Linq nella finestra di controllo, quindi sospetto che l'errore che hai riscontrato sia più un problema di Visual Studio che il codice non funzionante.

0

Provare questo codice per ottenere il conteggio di typeofwork non inizializzato.

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

come su

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 
Problemi correlati