Linq 将iQueryable转换为IEnumerable
下面的代码有什么问题?即使数据库中存在匹配的记录,它也不会返回任何项。如果错误,如何将我的Linq 将iQueryable转换为IEnumerable,linq,entity-framework,c#-4.0,Linq,Entity Framework,C# 4.0,下面的代码有什么问题?即使数据库中存在匹配的记录,它也不会返回任何项。如果错误,如何将我的IQueryable转换为IEnumerable public IEnumerable<TimelineItem> TimeLineItems { get; set; } public IEnumerable<TimelineItem> GetTimeLineItems(int SelectedPID) { TimeLineItems = (from t in db.Time
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;
}
public IEnumerable TimeLineItems{get;set;}
公共IEnumerable GetTimeLineItems(int-SelectedPID)
{
TimeLineItems=(从t开始,单位为db.TimeLineItems
其中t.ProductID==SelectedPID
选择new{t.Description,t.Title})作为IEnumerable;
按时归还物品;
}
获取null
的原因是,您试图将基于匿名类型的IQueryable
转换为IEnumerable
(new{t.Description,t.Title}
创建一个匿名类型的实例,该实例包含两个字段-Description
和Title
)您应该删除选择部件以使其正常工作
如果只想选择Description
和Title
,请使用这两个字段创建命名类型,并返回该类型的IEnumerable
:
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 };
}
公共类标题ESCR{
公共字符串标题{get;set;}
公共字符串说明{get;set;}
}
公共IEnumerable GetTimeLineItems(int-SelectedPID)
{
从t返回,单位为db.TimelineItems
其中t.ProductID==SelectedPID
选择新标题escr{t.说明,t.标题};
}
在我看来,如果你打算使用linq,那么就接受它,去掉那个深奥的符号:)
public IEnumerable GetTimeLineItems(int-SelectedPID)
{
返回db.TimelineItems.Where(tl=>tl.ProductID==SelectedPID)
.选择(tl=>new TimelineItem{
描述=tl.描述,
Title=tl.Title})
.AsEnumerable();
}
使用自动映射器将IQueryable
转换为inumerable
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;
}
将IQueryable转换为IEnumerable的业务用例是什么?IQueryable将为您提供延迟或延迟的非缓存数据,而IEnumerable将为您提供即时或即时的缓存数据。但是,如果您在上下文级别关闭了延迟加载,您仍然可以获得即时数据。我不想选择所有项目。我只想选择描述和标题,这就是我使用的原因Select@sureshcd10cvvc如果您需要对结果进行投影,请参见我的编辑,了解如何操作的说明。
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;
}