Problema col LINQ

di il
9 risposte

Problema col LINQ

Salve a tutti.
Sto provando degli esempi col Linq.

Ho una classe Users con i campi Age e Name e una lista di User

    List<User> users = new List<User>();
    // ....
    var v = from x in users where x.Name.Length > 3 select new { x.Age, x.Name };
    // ...
    v = users[0];
e ho questo errore:

Cannot implicitly convert type 'WindowsFormsCs.User' to 'System.Collections.Generic.IEnumerable<AnonymousType#1>' 
Non riesco a capire cosa significa, mi sembra tutto giusto.

9 Risposte

  • Re: Problema col LINQ

    Ciao bartig,

    stai usando due tipi incompatibili 'User' e 'List<User>' devi scrivere così:
    
    List<User> users = new List<User>();
    // ....
    var v = from x in users where x.Name.Length > 3 select new { x.Age, x.Name };
    // ...
    var u = users[0];
    
  • Re: Problema col LINQ

    Non capisco perché devo dichiarare due variant, non ne posso usare uno solo?
  • Re: Problema col LINQ

    La 'var' non è un variant, ma è una variabile locale tipizzata implicitamente.
    In pratica puoi fare a meno di scrivere il tipo esplicitamente è il compilatore che lo deduce automaticamente.
    Dopo che hai assegnato la 'var' rimane di quel tipo.
  • Re: Problema col LINQ

    Ma llora non faccio prima a dichiararla esplicitamente che è anche più chiaro? Francamente non ne vedo l' utilità.


    Comunque c' è ancora qualcosa che non va:
    
    List<User> users = new List<User>();
    //...
    var v = from x in users where x.Name.Length > 3 select new { x.Age, x.Name };
    User u = v.ElementAt(0);
    
    Genera questo errore:
    
    Error 1 Cannot implicitly convert type 'AnonymousType#1' to 'WindowsFormsCs.User' 
    
    v non dovrebbe contenere una lista di User?
  • Re: Problema col LINQ

    He, he in effetti c' ero cascato pure io! No, v non contiene una lista di User ma una lista di tipi anonimi.
    Butta un occhio alla documentazione su 'select new'
  • Re: Problema col LINQ

    In realtà avrei dovuto saperlo pure io, lo avevo studiato, ma ho ancora poca pratica
    E poi mi stanno facendo impazzire. Come mai questo non va?
    
               List<User> users = new List<User>();
                //...
                var v = from x in users where x.Name.Length > 3 select new { x.Age, x.Name };
                v = from x in users where x.Name.Length > 3 select new { x.Name };
    
    v adesso non dovrebbe essere una lista di tipi anonimi?
  • Re: Problema col LINQ

    Perchè i tipi saranno pure anonimi ma sono diversi!
  • Re: Problema col LINQ

    Ok, ma allora come faccio ad assegnarlo?
  • Re: Problema col LINQ

    Così:
    
    var a = from x in users where x.Name.Length > 3 select new { x.Age, x.Name };
    var b = from x in users where x.Name.Length > 3 select new { x.Name };
    var c = a.ElementAt(0);
    

    bartig ha scritto:


    Ma llora non faccio prima a dichiararla esplicitamente che è anche più chiaro? Francamente non ne vedo l' utilità.
    In effetti finché non usi i tipi anonimi sembra inutile.
Devi accedere o registrarti per scrivere nel forum
9 risposte