将iqueryable转换为IEnumerable

时间:2012-04-11 01:05:53

标签: linq entity-framework c#-4.0

我的代码有什么问题。即使db中存在匹配的记录,也不会返回任何项目。如果错误怎么能将我的IQueryable转换为IEnumerable?

public IEnumerable<TimelineItem> TimeLineItems { get; set; }
        public IEnumerable<TimelineItem> GetTimeLineItems(int SelectedPID)
        {
            TimeLineItems = (from t in db.TimelineItems
                             where t.ProductID == SelectedPID
                             select new { t.Description, t.Title })as IEnumerable<TimelineItem>;
            return TimeLineItems;
        }

由于

4 个答案:

答案 0 :(得分:9)

在我看来,如果你打算使用linq然后拥抱它,摆脱那种深奥的符号:)

   public IEnumerable<TimelineItem> GetTimeLineItems(int SelectedPID)
   {
      return db.TimelineItems.Where(tl => tl.ProductID == SelectedPID)
        .Select( tl => new TimelineItem {
            Description = tl.Description,
            Title = tl.Title })
        .AsEnumerable<TimelineItem>();
   }

答案 1 :(得分:4)

您获得null的原因是因为您尝试将基于匿名类型IQueryable转换为IEnumerable<TimelineItem>({{1}创建一个包含两个字段的匿名类型的实例 - new { t.Description, t.Title }Description)您应该删除Title部分以使其正常工作。

如果您只想选择SelectDescription,请使用这两个字段创建名为的类型,并返回该类型的Title

IEnumerable

答案 2 :(得分:0)

使用自动映射器将IQueryable转换为IEnumerable

 StudentsModel IEmodel = new StudentsModel();//IEnumerable 
            try {
                var Queryablemodel = _tblStudents.GetQueryable().FirstOrDefault(x => x.CNIC == strCNIC && x.LoginPassword == strPassword);//IQueryable
               //conversion with Auto Mapper
                IEmodel = AutoMapper.Mapper.Map(Queryablemodel , IEmodel ); 
            }
            catch(Exception ex){
                throw ex;
            }

答案 3 :(得分:0)

将IQueryable转换为IEnumerable的业务用例是什么? IQueryable将为您提供延迟或延迟的非缓存数据,而IEnumerable将为您提供立即或渴望的缓存数据。但是,如果您在上下文级别关闭了延迟加载,则仍然会立即获得数据。