在这些情况下,您也可以使用反射。当我通过多个字段的用户详细信息过滤结果时,我遇到了类似的问题。如果用户没有在搜索框中键入任何内容,则查询将返回数据库中的所有结果,这不是预期的结果。我问了这个问题,并第一次遇到了反思。
例如:
你有一个 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
}