gpt4 book ai didi

c# - 如何使用 LINQ Contains() 查找枚举列表?

转载 作者:太空狗 更新时间:2023-10-29 17:35:21 25 4
gpt4 key购买 nike

我有一个名为 OrderStatus 的枚举,它包含订单可能处于的各种状态:

  • 创建
  • 待定
  • 正在等待
  • 有效
  • 活跃
  • 已处理
  • 完成

我想做的是创建一个 LINQ 语句,告诉我 OrderStaus 是有效的、事件的、已处理的还是已完成的。

现在我有这样的东西:

var status in Order.Status.WHERE(status => 
status.OrderStatus == OrderStatus.Valid ||
status.OrderStatus == OrderStatus.Active||
status.OrderStatus == OrderStatus.Processed||
status.OrderStatus == OrderStatus.Completed)

这行得通,但它非常“冗长”。有没有办法将其转换为 Contains() 语句并将其缩短一点?

最佳答案

当然:

var status in Order.Status.Where(status => new [] {
OrderStatus.Valid,
OrderStatus.Active,
OrderStatus.Processed,
OrderStatus.Completed
}.Contains(status.OrderStatus));

您还可以定义一个扩展方法 In() 来接受一个对象和一个参数数组,并基本上包装 Contains 函数:

public static bool In<T>(this T theObject, params T[] collection)
{
return collection.Contains(theObject);
}

这允许您以更像 SQL 的方式指定条件:

var status in Order.Status.Where(status => 
status.OrderCode.In(
OrderStatus.Valid,
OrderStatus.Active,
OrderStatus.Processed,
OrderStatus.Completed));

了解并非所有 Linq 提供程序都喜欢在其 lambda 中使用自定义扩展方法。例如,NHibernate 在没有额外编码以扩展表达式解析器的情况下将无法正确翻译 In() 函数,但 Contains() 工作得很好。对于 Linq 2 对象,没问题。

关于c# - 如何使用 LINQ Contains() 查找枚举列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com