Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 将iQueryable转换为IEnumerable_Linq_Entity Framework_C# 4.0 - Fatal编程技术网

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;
            }