2012-08-16 181 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