C#Web API oData Filter失败

时间:2016-07-23 02:24:58

标签: c# asp.net-web-api2 odata

当我定义我的终点API时,返回所有列,oData $ filter,$ Skip,$ filter工作正常。

 [EnableQuery]
        public IQueryable<MyList> GetMyLists()
        {
            return db.MyLists;//directly from entity table
        }

但是当我只选择如下所示的某些列时,oData $ filter,$ Skip,$ filter失败。有什么想法吗?

public IQueryable<MyResult> GetMyLists()
        {
            return db.MyLists.Select(x => new MyResult
            {
                Trade_Name = x.Trade_Name,
                price = x.price,
                remarks = x.remarks,
                Comment = x.Comment,
                GenericGroupNumber = x.GenericGroupNumber
            }); 
        }

我将MyResult类定义为:

public class MyResult
    {
        public string Trade_Name;
        public decimal? price;
        public string remarks;
        public string Comment;
        public string GenericGroupNumber;

    }

非常感谢任何指导。

2 个答案:

答案 0 :(得分:0)

MyResult类没有[key]列,也没有映射到EDMX模型中的表。它被认为是一个复杂的实体(如存储过程)。 因此,您无法应用$ filter,$ skip。

答案 1 :(得分:0)

oData旨在与WebApiConfig.cs文件中的EDMX模型中描述的实体一起使用,除此之外的任何实体都不允许您应用$ filter,$ skip等。

您需要在EDMX模型中定义该实体,并根据实体名称将其放置在自己命名的控制器中,以使其正常工作。

class MyResultsController : ApiController {
    public IQueryable<MyResult> GetMyResults()
    {
        return db.MyLists.Select(x => new MyResult
        {
            Trade_Name = x.Trade_Name,
            price = x.price,
            remarks = x.remarks,
            Comment = x.Comment,
            GenericGroupNumber = x.GenericGroupNumber
        }); 
    }
}

然后确保您在MyResult

中正确映射WebApiConfig