我有一个包含对象的集合,其中一个对象属性是 PublishRequestStatus,它是一个枚举值。
我收到了另一个需要匹配的所有枚举值的列表,现在我知道如何搜索与值匹配的 1 个属性:
model = model.Where(x => x.PublishRequestStatus == PublishRequestStatus.Denied);
但是我无法匹配另一个集合中的所有可能值。例如,如果我有一个包含 PublishRequestStatus.Approved 和 PublishRequestStatus.Denied 的集合,我将如何使用 LINQ 搜索具有这些枚举值之一的所有对象?
我发现唯一有效的方法是在一个循环中为第二个集合中的每个枚举值创建一个列表,最后将所有列表连接在一起。不过,我很确定 LINQ 有更好的方法来实现我想要实现的目标。
请您参考如下方法:
这可能不是您要查找的内容,但更像是一个建议。而不是收到 List<SomeEnum> , 你可以简单地使用按位 |在您的枚举值上,并使用 Enum.HasFlags 查找它们:
var flags = PublishRequestStatus.Approved | PublishRequestStatus.Denied;
var otherFlags = PublishRequestStatus.Approved |
PublishRequestStatus.Denied |
PublishRequestStatus.MaybeApproved;
Console.WriteLine(otherFlags.HasFlags(flags)); // Yields true.
假设这样的事情是可能的。
