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 を探しています。申し訳ありません。Contains に変更し、typeof() を追加しました。それは、私が推測するテキストボックスに入力するだけで得られるものです。

4

2 に答える 2

2

findinf IF containsIntersectのみに関心があり、それらの集合の交差には関心がないため、を使用して物事を過度に複雑にしている理由がわかりません。status_typesi.Status

とにかく、最初の形式はより単純に見えますが、これらは両方とも機能するはずです (Any の使用について言及したので、2 番目の形式を思いつきました)。

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 に答える