18

我下面的代码有什么问题?即使数据库中存在匹配的记录,它也不会返回任何项目。如果它是错误的,我该如何转换我IQueryableIEnumerable

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

4 回答 4

17

在我看来,如果你打算使用 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>();
   }
于 2012-04-11T01:30:12.613 回答
6

您得到的原因null是因为您正在尝试将IQueryable基于匿名类型的转换为IEnumerable<TimelineItem>new { t.Description, t.Title }创建具有两个字段的匿名类型的实例 -Description并且Title)您应该删除该Select部分以使其工作。

如果您只想选择Descriptionand ,请使用这两个字段Title创建一个命名IEnumerable类型,并返回该类型的 an:

public class TitleDescr {
    public string Title {get;set;}
    public string Description {get;set;}
}

public IEnumerable<TitleDescr> GetTimeLineItems(int SelectedPID)
{
    return from t in db.TimelineItems
                     where t.ProductID == SelectedPID
                     select new TitleDescr { t.Description, t.Title };
}
于 2012-04-11T01:10:04.683 回答
0

使用自动映射器转换IQueryableIEnumerable

 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;
            }
于 2015-10-02T05:16:06.473 回答
0

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

于 2020-05-21T22:17:10.413 回答