我正在尝试这样做,这样我就可以发送查询,比如:但我在使用逐位函数时遇到了问题。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
。
看看这把小提琴示范一下。