繁体   English   中英

如何使用RestSharp过滤空值?

[英]how to filter null values with RestSharp?

我向RestSharp请求:

var request = new RestRequest("api/timerecord", Method.GET);
var response = client.Execute<List<TimeRecordDTO>>(request);

TimeRecords包含一个属性SettledOn。 它具有DateTime-Value或null值:

...,"SettledOn":null,...

要么

...,"SettledOn":"2018-01-02T18:26:01",...

现在,我尝试对此属性进行过滤。 我只想要TimeRecords,其中SettledOn为null。

我已经试过了

var request = new RestRequest("api/timerecord", Method.GET);
request.AddParameter("SettledOn", null);
var response = client.Execute<List<TimeRecordDTO>>(request);

但是我仍然得到所有的TimeRecords。

我该怎么做才能过滤实体?

您在这里混淆了这些概念。 RestSharp只是一个HTTP客户端库。 如果您的API方法返回所有TimeRecords实体,则HTTP响应将包含所有实体,并且在调用client.Execute<List<TimeRecordDTO>>(request);时,RestSharp将反序列化整个列表。 client.Execute<List<TimeRecordDTO>>(request); 在您的API分析此请求参数并在服务器端执行实际过滤之前,向请求中添加参数SettledOn不会有任何影响。

因此,您有两个选项可以过滤值:

客户端解决方案:

只需使用简单的LINQ过滤实体:

var request = new RestRequest("api/timerecord", Method.GET);
var response = client.Execute<List<TimeRecordDTO>>(request);
var filtered = response.Data.Where(x => x.SettledOn == null);

服务器端解决方案:

您应该调整API方法的实现以分析请求参数。 如果您需要增加只返回SettledOn设置为null实体的可能性,则可以请求参数settledOnNullOnly

public IEnumerable<TimeRecordDTO> Get(bool settledOnNullOnly)
{
    //  Pass settledOnNullOnly to DB query or filter entities with LINQ
    //  ...
}

现在,当您将settledOnNullOnly设置为true ,您将仅接收已过滤的实体。

var request = new RestRequest("api/values", Method.GET);
request.AddParameter("settledOnNullOnly", "true");
var response = client.Execute<List<TimeRecordDTO>>(request);

从性能的角度来看,服务器端解决方案更好,因为您无需获取和传输不必要的数据。 如果您有可能调整API并计划大量使用此类过滤,请使用此方法。 否则,客户端方法应该适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM