Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
C# 实体框架-在非持久类上创建IQueryable_C#_Entity Framework_Linq - Fatal编程技术网

C# 实体框架-在非持久类上创建IQueryable

C# 实体框架-在非持久类上创建IQueryable,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个OData实体框架服务(EF5)。我有一个例子,我有一组数据库记录,需要在返回它们之前进行操作 具体来说,这是一个树状结构中的记录列表,该结构的信息在数据库中。我返回的数据集必须展平-因此我需要在内存中创建树,然后在处理后返回一个新的数据集(将所有内容按正确的顺序和格式排列)。虽然我显然需要从数据库中获取整个数据集(通常在50到400条记录之间,所以没什么大不了的),但我希望保持IQueryable功能,以便根据需要发送子集 我看了以下内容——这似乎表明这是可能的 我已经创建了一个新的服

我有一个OData实体框架服务(EF5)。我有一个例子,我有一组数据库记录,需要在返回它们之前进行操作

具体来说,这是一个树状结构中的记录列表,该结构的信息在数据库中。我返回的数据集必须展平-因此我需要在内存中创建树,然后在处理后返回一个新的数据集(将所有内容按正确的顺序和格式排列)。虽然我显然需要从数据库中获取整个数据集(通常在50到400条记录之间,所以没什么大不了的),但我希望保持
IQueryable
功能,以便根据需要发送子集

我看了以下内容——这似乎表明这是可能的

我已经创建了一个新的服务来实现这一点,但是当服务启动时,它会抛出一个内部错误。任何关于是否可以这样做以及如何做的建议都将不胜感激

    [WebGet]
    public IQueryable<mobFlatSchedule> getSchedule(int projectID)
    {
        //get the records from the context
        List<ScheduleItem> siList = CurrentDataSource.ScheduleItems.Where(x => x.ProjectID == projectID).ToList();
        //convert the tree into a flat list of basic types
        List<mobFlatSchedule> flatSIList = scheduleFlattener.CreateScheduleDatasource(siList);
        return flatSIList.AsQueryable();
    }

    public class mobFlatSchedule
    {
        public int Level { get; set; }
        public int lineType { get; set; }
        public decimal? Qty { get; set; }
        public decimal? QtySched { get; set; }
        public decimal? Rate { get; set; }
        public int ScheduleID { get; set; }
        public int ProjectID { get; set; }
        public string ScheduleNo { get; set; }
        public string ScheduleDescription { get; set; }
        public decimal? SchedTotal { get; set; }
        public decimal? Total { get; set; }
        public string Unit { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="mobFlatSchedule"/> class.
        /// </summary>
        public mobFlatSchedule(CivilPro.InfrastructureC.Schedule.FlatSchedule fs)
        {
            Level = fs.Level;
            lineType = (int) fs.lineType;
            Qty = fs.Qty1;
            QtySched = fs.QtySched;
            Rate = fs.Rate1;
            ScheduleID = fs.Schedule.ScheduleID;
            ProjectID = fs.Schedule.ProjectID.ProjectID;
            ScheduleNo = fs.ScheduleNo;
            ScheduleDescription = fs.ScheduleDescription;
            SchedTotal = fs.SchedTotal;
            Total = fs.Total1;
            Unit = fs.Unit;
        }
    }
[WebGet]
公共IQueryable getSchedule(int projectID)
{
//从上下文中获取记录
List siList=CurrentDataSource.ScheduleItems.Where(x=>x.ProjectID==ProjectID.ToList();
//将树转换为基本类型的平面列表
List FlatsList=ScheduleFlatter.CreateScheduleDatasource(siList);
返回flatsList.AsQueryable();
}
公共课活动时间表
{
公共整数级别{get;set;}
公共int线型{get;set;}
公共小数?数量{get;set;}
公共十进制数?QtySched{get;set;}
公共十进制?速率{get;set;}
public int ScheduleID{get;set;}
公共int ProjectID{get;set;}
公共字符串ScheduleNo{get;set;}
公共字符串ScheduleDescription{get;set;}
公共十进制数?SchedTotal{get;set;}
公共小数?总计{get;set;}
公共字符串单元{get;set;}
/// 
///初始化类的新实例。
/// 
公共移动平台时间表(CivilPro.Infrastructure C.Schedule.FlatSchedule fs)
{
Level=fs.Level;
线型=(int)fs.lineType;
数量=fs.Qty1;
QtySched=fs.QtySched;
速率=fs.Rate1;
ScheduleID=fs.Schedule.ScheduleID;
ProjectID=fs.Schedule.ProjectID.ProjectID;
ScheduleNo=fs.ScheduleNo;
schedulescription=fs.schedulescription;
SchedTotal=fs.SchedTotal;
总计=fs.Total1;
单位=fs.单位;
}
}

Include
CreateScheduleDatasource
请,您也可以通过调用
ToList()
执行查询,稍后调用
AsQueryable()
只会将其转换回
IQueryable
。故意调用ToList。这是为了执行查询。所有数据都是编译树结构所必需的。然后将其处理到另一个类,实际上,如何处理与此无关。它被强制转换为iqueryable,因为我希望它可以启用自动实现take、skip等(似乎我不能)Include
CreateScheduleDatasource
please,您也可以通过调用
ToList()
,调用
AsQueryable()来执行查询
稍后,它只是将其返回到一个
IQueryable
。它是故意调用tolist的。这是为了执行查询。所有数据都是编译树结构所必需的。然后将其处理到另一个类,实际上,如何处理与此无关。它被转换为iqueryable,因为我希望它能够自动实现take、skip等(似乎我不能)