我在Web Api V2下有一个OData服务。我有一个带Linq查询的控制器来从表中返回数据。这是控制器查询:
[EnableQuery]
public IQueryable<ImportContracts_ImportContracts> Get()
{
IQueryable<ImportContracts_ImportContracts> query = new List<ImportContracts_ImportContracts>().AsQueryable();
query = (from BRRIMPORTCONTRACTS imcon in db.BRRIMPORTCONTRACTS.Where(x => x.ZZSTATE == 0)
select new
{
ReferenceDateData = imcon.ReferenceDate,
ImportationDate = imcon.ImportationDate,
LastImportation = imcon.LastImportation
}).ToList().Select(x => new ImportContracts_ImportContracts
{
ReferenceDateData = x.ReferenceDateData,
ImportationDate = x.ImportationDate,
LastImportation = x.LastImportation
}).AsQueryable();
return query;
}
我的表BRRMIMPORTCONTRACTS有100万条记录。当我到达这里时,我得到一个System.OutOfMemoryException。
我知道这可能不是查询实体的最佳方式,但我只是想要一个解决方法。
我尝试过[EnableQuery(PageSize = 10)]提示,但没有成功。我认为问题出在查询本身。
提前致谢。 菲利普
答案 0 :(得分:0)
这会有所作为吗?
[EnableQuery]
public IQueryable<ImportContracts_ImportContracts> Get()
{
IQueryable<ImportContracts_ImportContracts> query = new List<ImportContracts_ImportContracts>().AsQueryable();
query = (from BRRIMPORTCONTRACTS imcon in db.BRRIMPORTCONTRACTS.Where(x => x.ZZSTATE == 0)
.Select(x => new ImportContracts_ImportContracts
{
ReferenceDateData = x.ReferenceDate,
ImportationDate = x.ImportationDate,
LastImportation = x.LastImportation
});
return query;
}
请注意,ToList()已消失,因此返回IQueryable。这有帮助吗?
答案 1 :(得分:0)
您可以自己应用查询,例如
public IQueryable<ImportContracts_ImportContracts> Get(ODataQueryOptions<..> options)
{
IQueryable<ImportContracts_ImportContracts> query = new List<ImportContracts_ImportContracts>().AsQueryable();
// use the options to apply
...
return query;
}