dbcontext set()からソフト削除をフィルタリングする
-
29-10-2019 - |
質問
このDbSetからIsSoftDeleted
アイテムをフィルタリングするにはどうすればよいですか?
ジェネラコディセタグプレ
方法 ジェネラコディセタグプレ
モデル ジェネラコディセタグプレ
編集:Whatever
がBaseEntity
から派生していることを示すのを忘れた
解決
WhateverクラスにはIsSoftDeletedプロパティがないため、フィルタリングするものはありません。 BaseEntityから派生したものは何でも仮定します。
主な問題は、IQueryable
DbSetをIQueryable
注:これは、dbContext.Set(type).Cast
他のヒント
問題は、Set(Type type)
が非ジェネリックのDbSet
を返すことです。フィルタを適用するには、フィルタを一般的なIQueryable<T>
にキャストする必要があります:
ジェネラコディセタグプレ
これは、type
がBaseEntity
またはBaseEntity
自体から派生している場合にのみ機能します。それ以外の場合は、ランタイム例外が発生します。
結果のset
はIQueryable<BaseEntity>
型であるため、問題は、この結果がどの程度有用であり、Where(w => w.Name == "abc")
などの派生エンティティにさらにフィルターを適用する方法です。少なくとも、set
型のdynamic
を作成してもコンパイル可能なコードを取得できませんでした。また、強い型付けをすべて失いたくありません。