【发布时间】:2022-10-13 02:41:40
【问题描述】:
我正在努力做到这一点,以便我可以发送如下查询:但我在使用按位函数时遇到了麻烦。 var 订单错误,因为 TypeEnum 不能与 IEnumerable 一起使用
【问题讨论】:
标签: c# .net get bitwise-operators react-fullstack
我正在努力做到这一点,以便我可以发送如下查询:但我在使用按位函数时遇到了麻烦。 var 订单错误,因为 TypeEnum 不能与 IEnumerable 一起使用
【问题讨论】:
标签: c# .net get bitwise-operators react-fullstack
我认为你做的工作比必要的多。 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 进行演示。
【讨论】: