2014-01-20 6 views
6

これを達成する方法は少し混乱しています。C#ショートカットLINQ。どこかのステートメント

私はサイトとユーザーによって生成されたカテゴリを持っており、関連付けられたユーザーが作成したカテゴリが存在する場合はそのアイテムを返したいと思います。したがって、カテゴリが選択されている場合はうまく動作しますが、カテゴリがnullの場合は、isActiveプロパティを取得するオブジェクトがないため、明らかに失敗します。

var item = User.Items.Where(x => x.Categoires.FirstOrDefault(s => !s.isSystem).isActive) 

したがって、最初またはデフォルトがnullの場合はチェックが必要です。ご了承ください。おそらく、

おかげ

答えて

7

var item = User.Items 
    .Where(ui => ui.Categoires.Any(uic => !uic.isSystem && uic.isActive)); 

これは、少なくとも1つの活性非システム・カテゴリとユーザーのアイテムを返します。

カテゴリはアイテム上の任意のフィールドであり、カテゴリは のisActiveの状態を有しているので、アイテムは、それが は、そのカテゴリがアクティブでなければならないしなければならないdoesntの関連カテゴリを持っている場合。

その後、あなたは(私はそれはNULLにすることはできませんと仮定)カテゴリなしの項目を含める必要があります:

var item = User.Items 
    .Where(ui => !ui.Categoires.Any() || ui.Categoires.Any(uic => !uic.isSystem && uic.isActive)); 
+0

ブリリアント答えはなく、それはカテゴリを持っていますが、場合doesntの場合は後何イム、私はアイテムをしたいです関連するカテゴリがある場合は関連するカテゴリがアクティブである必要があります。ご質問が不明な場合はごめんなさい –

+0

申し訳ありませんがまだクリアされていません:カテゴリにカテゴリがありますが、関連付けられたカテゴリがある場合、それは矛盾ではありませんか?それはどのようにカテゴリを持たないのでしょうか? –

+0

はいカテゴリは項目のオプションフィールドであり、カテゴリはisActiveの状態を持ちます。したがって、項目に関連付けられたカテゴリがある場合、そのカテゴリはアクティブでなければなりません。 –

関連する問題