【问题标题】:ASP.NET Web API GET Method: Passing multiple values for single parameterASP.NET Web API GET 方法:为单个参数传递多个值
【发布时间】:2013-07-28 14:52:21
【问题描述】:

我对 ASP.NET Web API 还是很陌生。

我正在尝试构建一个 API 方法,该方法可以处理来自搜索客户端的单个参数的多个值。

条件必须是 OR 搜索,例如。红色或蓝色或绿色的颜色搜索。

我将颜色作为整数传递给我的方法。请在下面找到我的控制器方法,它无法编译并出现以下错误

错误:

错误 1 ​​'int' 不包含 'Contains' 的定义,并且最佳扩展方法重载 'System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery, TSource)' 有一些无效参数

错误 2 实例参数:无法从“int”转换为“System.Linq.ParallelQuery”

代码:

public IQueryable<Items> GetItemByColour(string Colour)
{
    int[] intArr = Array.ConvertAll(Colour.Split(','), s => int.Parse(s));

    var query = from a in db.Items
                where a.ItemsColour.Contains(intArr)
                select a;

    return query;
}

【问题讨论】:

    标签: linq asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    你似乎有两个不同的问题。第一个是您不需要将颜色列表作为字符串发送并手动将其转换为整数数组,您可以这样做:

    public IQueryable<Items> GetItemByColour([FromUri] int[] Colour)
    

    您在 LINQ 查询中遇到错误,因为 a.ItemColour 是一个整数,而不是整数列表,因此您不能在其上使用 Contains 扩展方法。你必须这样做(假设Colour 现在是一个整数数组):

    var query = from a in db.Items
                where Colour.Contains(a.ItemsColour)
                select a;
    
    return query;
    

    【讨论】:

    • 感谢您的快速响应,这绝对是正确的方法。唯一的问题是我正在使用 WP8 应用程序来使用 Web API 并使用 Web 客户端。不确定如何使用 Web 客户端传递数组
    • 这很简单,你可以这样做:example-url.com/?Colour=1&Colorur=2&Colour=3。在此示例中,Color 查询字符串变量的每个实例都将是 Color 数组中的一项。这样,您的服务也更具互操作性。关于您的问题,我确实也指出了您遇到的另一个问题以及如何解决它。 :)
    • 这是迄今为止最好的方法。通过传递一个字符串,它要求您进行类型检查以防止任何int.Parse FormatExceptions
    • 太完美了!没有意识到这一点。浪费了我生命中的 3 个小时试图让它早点工作!
    【解决方案2】:

    我想这将是您的问题的解决方案:

    public IQueryable<Items> GetItemByColour(string Colour)
    {
        List<int> intArr = Array.ConvertAll(Colour.Split(','), s => int.Parse(s)).ToList();
    
        var query = from a in db.Items
                    where a.intArr.Contains(ItemsColour)
                    select a;
    
        return query;
    }
    

    问题是您正在寻找 int 中是否存在数组。您需要在数组中查找 int 的存在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2013-11-22
      • 2012-06-11
      • 1970-01-01
      • 2014-07-05
      • 2019-01-24
      • 2017-07-18
      相关资源
      最近更新 更多