我的代码有什么问题。即使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;
}
由于
答案 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
部分以使其正常工作。
如果您只想选择Select
和Description
,请使用这两个字段创建名为的类型,并返回该类型的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将为您提供立即或渴望的缓存数据。但是,如果您在上下文级别关闭了延迟加载,则仍然会立即获得数据。