2015-08-20 6 views
6
var query = (from RESTAURANT in db.RESTAURANTs 
      where RESTAURANT.REST_ID == RestID 
      select new { name = RESTAURANT.name}); 

Come eseguire il cast di query anziché var?Come trasmettere l'oggetto da linq

grazie.

Aggiungere ulteriori informazioni, voglio fare quanto segue possibile. È possibile?

enter image description here

+1

'selezionare RESTAURANT.name'? – Backs

+0

Trasmetti cosa a cosa? –

+1

usa '.ToList()' –

risposta

6

Vostri criteri attualmente assegna un tipo anonimo usando select new { }, che richiede l'uso var. Se si desidera assegnare un tipo noto, aggiungerlo al tuo select clausola:

IEnumerable<SomeType> query = 
     from RESTAURANT in db.RESTAURANTs 
     where RESTAURANT.REST_ID == RestID 
     select new SomeType { Name = RESTAURANT.name } ; 

public class SomeType 
{ 
    public string Name { get; set; } 
} 
+0

Vorrei cambiare" tipo concreto "in" tipo noto ". Il tipo anonimo generato è ancora un tipo concreto. – haim770

+0

@ haim770 Hai capito. –

1

mouse-over il var e il compilatore vi dirà che tipo può sostituire esso.

Se si desidera utilizzare questo tipo in modo esplicito, è necessario inserirlo invece di var. Tuttavia non cambierà nulla per il compilatore.

0

Non c'è bisogno di dichiarare query separatamente, uso ?:operatorvar query = <condition> ? <1st Linq query> : <2nd Linq query> invece di if-else si può fare questo genere:

var query = string.IsNullOrEmpty(dealer_code) ? 
      (from RESTAURANT in db.RESTAURANTs 
      where RESTAURANT.REST_ID == RestID 
      select new { name = RESTAURANT.name}): 
      (from u in db.RESTAURANTs 
      where u.dealer_code == dealer_code 
      select new { name = u.name}); 
1

questo:

var query = (from RESTAURANT in db.RESTAURANTs 
      where RESTAURANT.REST_ID == RestID 
      select new { name = RESTAURANT.name}); 

definisce un interrogazione. Quando il programma è in esecuzione e questa linea è stata elaborata, la variabile query fa riferimento a un'istanza di query. Il database non è stato ancora richiamato.

Se si aggiunge (per esempio) .ToList() alla tua dichiarazione come questa:

var query = (from RESTAURANT in db.RESTAURANTs 
      where RESTAURANT.REST_ID == RestID 
      select new { name = RESTAURANT.name}).ToList(); 

Poi query conterrà un elenco di elementi che sono stati recuperati dal database. Tuttavia, anche in questo caso, il tipo di elementi nell'elenco è di tipo anonimo, quindi non è ancora possibile modificare lo var in un tipo denominato. Se lo desideri, devi fare in modo che la query restituisca un tipo con nome noto. Come questo:

List<string> query = (from RESTAURANT in db.RESTAURANTs 
      where RESTAURANT.REST_ID == RestID 
      select RESTAURANT.name).ToList(); 

o forse in questo modo:

public class Restaurant 
{ 
    public string Name {get; set;} 
} 

List<Restaurant> query = (from RESTAURANT in db.RESTAURANTs 
      where RESTAURANT.REST_ID == RestID 
      select new Restaurant() { Name = name }).ToList();