【问题标题】:GET Request in .NET Core 6 with multiple parameters in a query - using bitwise在 .NET Core 6 中使用查询中的多个参数获取请求 - 使用按位
【发布时间】:2022-10-13 02:41:40
【问题描述】:

我正在努力做到这一点,以便我可以发送如下查询:但我在使用按位函数时遇到了麻烦。 var 订单错误,因为 TypeEnum 不能与 IEnumerable 一起使用

【问题讨论】:

    标签: c# .net get bitwise-operators react-fullstack


    【解决方案1】:

    我认为你做的工作比必要的多。 Enum.TryParse 能够采用逗号分隔的名称列表并将其解析为正确的值:

    public static void Get(string orderTypes)
    {
        var orders = Enumerable.Empty<OrderList>();
        if (Enum.TryParse(typeof(TypeEnum), orderTypes, out var enumOrderTypes))
        {
            orders = _context.OrderLists.Where(o => (o.orderType & enumOrderTypes) > 0);
        }
        return Ok(orders);
    }
    

    但是,这假定 orderTypes 仅包含有效的枚举值名称。因此,如果 orderTypes"Standard,IDontExist" Enum.TryParse 将返回 false。


    如果您想允许无效名称并将它们过滤掉,您可以这样做:

    public static void Get(string orderTypes)
    {
        var typeList = orderTypes.Split(',',
            StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
    
        // I'd recommend adding 'None = 0' as a default value for the enum
        TypeEnum enumOrderTypes = TypeEnum.None;
        foreach (var strType in typeList)
        {
            if (Enum.TryParse(typeof(TypeEnum), strType, out var enumType))
            {
                enumOrderTypes |= (TypeEnum)enumType;
            }
        }
        
        var orders = _context.OrderLists.Where(o => (o.orderType & enumOrderTypes) > 0);
        
        return Ok(orders);
    }
    

    在这个例子中,如果orderTypes"Standard,IDontExist",那么enumOrderTypes 最终将只包含Standard

    查看this fiddle 进行演示。

    【讨论】:

      猜你喜欢
      • 2022-11-05
      • 2012-12-09
      • 2021-06-06
      • 2017-04-24
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多