2012-08-16 10 views
6

Uso EntityFramework, sto interrogando e restituendo dati parziali usando Tipi anonimi. Attualmente sto usando IQueryable<dynamic>, funziona, ma mi piacerebbe sapere se questo è il modo corretto per farlo o se c'è qualche altro tipo di dati di ritorno di cui non sono a conoscenza.IQueryable per i tipi anonimi

public IQueryable<dynamic> FindUpcomingEventsCustom(int daysFuture) 
{ 
    DateTime dateTimeNow = DateTime.UtcNow; 
    DateTime dateTimeFuture = dateTimeNow.AddDays(daysFuture); 
    return db.EventCustoms.Where(x => x.DataTimeStart > dateTimeNow & x.DataTimeStart <= dateTimeFuture) 
     .Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart}); 
} 
+0

Qual è il problema della parte 'IQueryable' o' dynamic' del tipo restituito? – nemesv

+0

hi nemesv, nessun problema, mi piacerebbe sapere di più su C# e tipo anonimo per questo motivo che sto chiedendo. Grazie per il tuo commento – GibboK

risposta

9

Normalmente, si utilizzano i tipi anonimi solo nell'ambito di un metodo. Non si restituiscono tipi anonimi al chiamante. Se è quello che vuoi fare, devi creare una classe e restituirla:

public class Event 
{ 
    private readonly int _eventId; 
    private readonly string _eventTitle; 
    private readonly DateTime _dateTimeStart; 

    public Event(int eventId, string eventTitle, DateTime dateTimeStart) 
    { 
     _eventId = eventId; 
     _eventTitle = eventTitle; 
     _dateTimeStart = dateTimeStart; 
    } 

    public int EventId { get { return _eventId; } } 
    public string EventTitle { get { return _eventTitle; } } 
    public DateTime DateTimeStart{ get { return _dateTimeStart; } } 
} 



public IQueryable<Event> FindUpcomingEventsCustom(int daysFuture) 
{ 
    DateTime dateTimeNow = DateTime.UtcNow; 
    DateTime dateTimeFuture = dateTimeNow.AddDays(daysFuture); 
    return db.EventCustoms 
      .Where(x => x.DataTimeStart > dateTimeNow 
         && x.DataTimeStart <= dateTimeFuture) 
      .Select(y => new Event(y.EventId, y.EventTitle, y.DataTimeStart)); 
} 
+1

Stavo pensando di restituire il tipo anonimo in quanto il risultato dell'azione è JSON – GibboK

+0

@GibboK: non sono sicuro di seguirlo. Non vedo un "azione" o JSON qui –

+0

sì, non ho caricato il codice completo, grazie per la tua risposta – GibboK