2012-08-16 27 views
6

Ich benutze EntityFramework, ich abzufragen und teilweise Daten mit anonymen Typen zurückgeben. Zur Zeit verwende ich IQueryable<dynamic>, es funktioniert, aber ich würde gerne wissen, ob dies der richtige Weg ist, um es zu tun, oder wenn es einen anderen zurückkehrenden Datentyp gibt, den ich nicht kenne.IQueryable für anonyme Typen

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

Was ist das Problem des 'IQueryable' oder der' dynamic' Teil des Rückgabetypen? – nemesv

+0

Hallo nemesv, kein Problem, ich möchte mehr über C# und anonymen Typ aus diesem Grund wissen, frage ich. Danke für deinen Kommentar – GibboK

Antwort

9

Normalerweise verwenden Sie anonyme Typen nur im Rahmen einer Methode. Sie geben keine anonymen Typen an den Aufrufer zurück. Wenn das, was Sie tun mögen, sollten Sie eine Klasse erstellen und zurück, dass:

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

Ich dachte an den anonymen Typ zurückzukehren, da das Ergebnis der Aktion JSON ist – GibboK

+0

@GibboK: Ich bin mir nicht sicher, ob ich folge. Ich sehe keine "Aktion" oder JSON hier –

+0

ja Ich habe nicht den vollständigen Code hochgeladen, danke für Ihre Antwort – GibboK