在查询中使用多个参数的.NET Core 6中的GET请求-使用位



我正在尝试这样做,这样我就可以发送查询,比如:但我在使用逐位函数时遇到了问题。var顺序是错误的,因为TypeEnum不能与IEnumerable 一起使用

我认为你做的工作超出了需要。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

看看这把小提琴示范一下。

最新更新