0

环顾四周,但没有看到这个问题。我基本上想知道这样做的“最好”(最快、最易读、最惯用等)的方式是什么。

上下文是我有一个 LINQ 查询来根据可能的枚举值列表进行过滤,并希望它尽可能地保持非嵌套。在python中,它会像

def GetItems(status_types:list)
    return filter(lambda item: item.Status in status_types, ALL_ITEMS)

我认为在 C# 中我可能需要做一个

ALL_ITEMS
    .Where(i => Enum.GetValues(typeof(StatusEnum)
    .Intersect(status_types))
    .Contains(i.Status));

这合理吗?这对我来说似乎有点迟钝,尽管这可能只是我个人的迟钝在起作用。

编辑我认为我在这里使用 Any() 错误。现在正在寻找合适的 linq thingo,抱歉。更改为包含,并添加了 typeof()。这就是我在我猜的文本框中输入的结果。

4

2 回答 2

2

我不知道你为什么使用过于复杂Intersect,因为你只对 findinf IF status_typescontains感兴趣i.Status,而不是它们的集合交集。

无论如何,这两个都应该可以完成工作,即使第一种形式看起来更简单(我想出了第二种形式,因为你提到了 Any 的使用):

ALL_ITEMS
  .Where(i => status_types.Contains(i.Status));

或者

ALL_ITEMS
  .Where(i => status_types.Any(x=>x==i.Status));
于 2013-08-28T22:11:28.580 回答
1
var itemsWithCorrectStatus = collection.Where(i=>status_types.Contains(i.Status));

This iterates over each item in collection, and checks whether i.Status is in status_types. If it is, include it. If not, exclude it.

于 2013-08-28T22:15:34.480 回答