我想根据用户输入的内容从数据库中选择数据。但是,如果没有提供该条件(null),它将忽略该条件,只接受提供的条件来筛选出相关的行。
我发现我的解决方案(伪代码)非常低效和丑陋,我希望有人能和我分享他/她的知识。
这就是我尝试过的:
'''
//selectConditions - input by user
var dataList = from data in entities.StudentsData
orderby data.Id
select data;
if (selectCondition.Age != null)
{
dataList = filter(dataList, selectCondition.Age);
}
if (selectCondition.Gender != null)
{
dataList = filter(dataList, selectCondition.Gender);
}
//may contain more conditions
//dataList now contains all rows with conditions specified by user
'''所以如果我有张桌子
Name Age 性别
汤姆12男
玛丽13女
5月15日女性
杰克14男
案例1:条件是
性别:男性
年龄:null
我应该去
汤姆12男
杰克14男
案例2:条件如下
性别:女性
年龄:15
我应该去
5月15日女性
发布于 2019-12-12 09:23:33
您可以使用||的功能
entitieslist.Where(stud =>
(!selectCondition.Age.HasValue || selectCondition.Age == stud.Age)
&& (!selectCondition.Gender.HasValue || selectCondition.Gender== stud.Gender)
.ToList()发布于 2019-12-12 09:14:06
我不认为您可以在一个查询中应用所有过滤器。您可以检查非空值,并添加适当的where子句。
A样本如下:
var datalist = entities.StudentsData.OrderBy(stud => stud.id);
//filterCondition contains the filter values
if(filterCondition.Age.HasValue)
{
datalist = datalist.Where(stud => stud.Age == filterCondition.Age);
}
if(filterCondition.Gender.HasValue)
{
datalist = datalist.Where(stud =>
stud.Gender.Equals(filterCondition.Gender))
}
//More filters can be added as per your requirement.
datalist.ToList();我希望这能帮到你。
发布于 2019-12-12 09:25:45
如果条件为null,则可以返回true。
var dataList = from data in entities.StudentsData
where
(selectCondition.Age == null ? true :data.Age ==selectCondition.Age )&&
(selectCondition.Gender == null ? true :data.Gender ==selectCondition.Gender )
//...(check if is null ? return true: your conidtion)
orderby data.Id
select data;https://stackoverflow.com/questions/59300513
复制相似问题