2012-08-16 218 views
6

我使用EntityFramework,我查詢並使用匿名類型返回部分數據。目前我使用的是IQueryable<dynamic>,它的工作原理,但我想知道這是否是正確的方式來做到這一點,或者如果有一些我不知道的其他返回數據類型。匿名類型IQueryable

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

什麼是IQueryable或返回類型的'dynamic'部分的問題? – nemesv 2012-08-16 07:45:55

+0

嗨nemesv,沒問題,我想知道更多關於c#和匿名類型的原因,我問。感謝您的評論 – GibboK 2012-08-16 07:47:44

回答

9

通常情況下,您只能在一個方法的範圍內使用匿名類型。您不會將匿名類型返回給調用者。如果這就是你想要做的,你應該創建一個類並返回:

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

我正在考慮返回匿名類型作爲行動的結果是JSON – GibboK 2012-08-16 08:23:53

+0

@GibboK:我不知道我關注。我在這裏沒有看到「行動」或JSON – 2012-08-16 08:26:14

+0

是的我沒有上傳完整的代碼,謝謝你的回答 – GibboK 2012-08-16 08:45:45