将iqueryable转换为IEnumerable

Ren*_*nny 13 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;
        }
Run Code Online (Sandbox Code Playgroud)

谢谢

Tra*_*s J 10

在我看来,如果你打算使用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>();
   }
Run Code Online (Sandbox Code Playgroud)


das*_*ght 6

您得到的原因null是因为您试图将IQueryable基于匿名类型的转换为IEnumerable<TimelineItem>(new { t.Description, t.Title }创建具有两个字段的匿名类型的实例 -DescriptionTitle) 您应该删除该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 };
}
Run Code Online (Sandbox Code Playgroud)