【问题标题】:C# Web API oData Filter failC# Web API oData 过滤器失败
【发布时间】:2016-07-23 02:24:58
【问题描述】:

当我将端点 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;

    }

非常感谢任何指导。

【问题讨论】:

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


    【解决方案1】:

    类 MyResult 没有 [key] 列,并且不映射到 EDMX 模型中的表。它被认为是一个复杂的实体(如存储过程)。 所以你不能应用 $filter, $skip。

    【讨论】:

      【解决方案2】:

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

      然后确保在WebApiConfig 中正确映射MyResult

      【讨论】:

        猜你喜欢
        • 2013-03-03
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 2022-08-02
        • 1970-01-01
        • 1970-01-01
        • 2017-05-25
        • 1970-01-01
        相关资源
        最近更新 更多