このような状況でもリフレクションを使用できます。複数のフィールドを持つユーザーの詳細で結果をフィルタリングしていたときに、同様の問題が発生しました。ユーザーが検索ボックスに何も入力しない場合、クエリはデータベースからすべての結果を返しますが、これは意図した結果ではありません。私は質問をして、初めて反省して会いました。
例えば:
以下のような UserDetail モデルがあります
public class UserDetail{
public string FirstName {get;set;}
public string LastName {get;set;}
public string Country {get;set;}
}
次に、userDetail オブジェクトがあり、LINQ を使用して UserDetail オブジェクトのプロパティが null または空でないことを確認したいとします。
return userDetail.GetType().GetProperties()
.Where(pi => pi.GetValue(userDetail) is string)
.Select(pi => (string) pi.GetValue(userDetail))
.All(value => !String.IsNullOrEmpty(value));
userDetail オブジェクトの文字列プロパティが null または空でない場合、このメソッドは true を返します。すべてのプロパティに何かが含まれている場合、これは true を出力します。
あなたのロジックは次のようになります。
public bool AllUserDetailsContainSomething(UserDetail userDetail){
return userDetail.GetType().GetProperties()
.Where(pi => pi.GetValue(userDetail) is string)
.Select(pi => (string) pi.GetValue(userDetail))
.All(value => !String.IsNullOrEmpty(value));
}
次に、このメソッドを呼び出すことができます
if(AllUserDetailsContainSomething(userDetail)){
//do something
}