Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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# 带有空列表(零计数)的OData结果将导致错误_C#_Asp.net_Asp.net Web Api_Odata - Fatal编程技术网

C# 带有空列表(零计数)的OData结果将导致错误

C# 带有空列表(零计数)的OData结果将导致错误,c#,asp.net,asp.net-web-api,odata,C#,Asp.net,Asp.net Web Api,Odata,我已经实现了OData来查询API生成的列表。但有时列表是空的,OData结果应该只返回一个空json,但它不返回。相反,它抛出以下错误 值必须大于或等于1。参数名称:值实际值为0 这是我的控制器方法 // Get states by Id [HttpGet] [ActionName("GetStatesByID")] public ODataResult<DataAccess.Model.State> GetStatesByID(ODataQuer

我已经实现了OData来查询API生成的列表。但有时列表是空的,OData结果应该只返回一个空json,但它不返回。相反,它抛出以下错误

值必须大于或等于1。参数名称:值实际值为0

这是我的控制器方法

 // Get states by Id
    [HttpGet]
    [ActionName("GetStatesByID")]    
    public ODataResult<DataAccess.Model.State> GetStatesByID(ODataQueryOptions options,int id)
    {

        var states = this.Repository.GetAllStatesByCountry(id).AsQueryable<DataAccess.Model.State>();

        var results = (options.ApplyTo(states) as IQueryable<DataAccess.Model.State>);


        long count = states.Count();

        return new ODataResult<DataAccess.Model.State>(results, null, count);

    }
//按Id获取状态
[HttpGet]
[ActionName(“GetStatesByID”)]
公共ODataResult GetStatesByID(ODataQueryOptions选项,int id)
{
var states=this.Repository.GetAllStatesByCountry(id).AsQueryable();
var结果=(options.ApplyTo(states)为可查询);
长计数=states.count();
返回新的ODataResult(结果、null、计数);
}
每当列表为空时,我可以将计数设置为0,这不会引发错误,但这确实不是一个好的做法,因此我想知道是否还有其他解决方法,以便ODataResult在列表为空时返回空json,而不是引发错误


谢谢

由于我没有当前的环境,所以我没有机会测试此功能,但请尝试一下:

[HttpGet]
[ActionName("GetStatesByID")]    
public ODataResult<DataAccess.Model.State> GetStatesByID(ODataQueryOptions options,int id)
{
    var states = this.Repository.GetAllStatesByCountry(id)
                                .AsQueryable<DataAccess.Model.State>();

    long count = states.Count();

    if(count == 0)
      return null;

    var results = (options.ApplyTo(states) as IQueryable<DataAccess.Model.State>);

    return new ODataResult<DataAccess.Model.State>(results, null, count);
}
[HttpGet]
[ActionName(“GetStatesByID”)]
公共ODataResult GetStatesByID(ODataQueryOptions选项,int id)
{
var states=this.Repository.GetAllStatesByCountry(id)
.AsQueryable();
长计数=states.count();
如果(计数=0)
返回null;
var结果=(options.ApplyTo(states)为可查询);
返回新的ODataResult(结果、null、计数);
}
然后处理空/空结果客户端,或者您可以执行>>:


也就是说,当count>0时,只需序列化ODataResult并将其作为流返回;当count为0时,返回ODataResult的硬编码字符串表示形式(计数为零),等等。虽然不太美观,但可以工作。

这是ODataResult类中的一个错误。对应的codeplex bug位于

ya,可以工作,但是客户端guyz要求一些一致性,因为所有其他API都以json格式返回,其中包含“count”和“items”,其中包含列表。有没有一种方法可以让我保留这种格式,并将count和items都作为null发送,而不仅仅是发送null?我看到了一些帖子,它们与您遇到的问题相同,即这是ODataResult类的一个限制。也许您可以这样做,即当count>0时,只需序列化ODataResult并将其作为流返回(请参阅链接),当count为0时,返回ODataResult的硬编码字符串表示形式(计数为零),等等。虽然没有那么漂亮,但它可以工作