首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以多种条件(可以为null)优雅地从数据库中选择行?

如何以多种条件(可以为null)优雅地从数据库中选择行?
EN

Stack Overflow用户
提问于 2019-12-12 08:35:15
回答 4查看 406关注 0票数 0

我想根据用户输入的内容从数据库中选择数据。但是,如果没有提供该条件(null),它将忽略该条件,只接受提供的条件来筛选出相关的行。

我发现我的解决方案(伪代码)非常低效和丑陋,我希望有人能和我分享他/她的知识。

这就是我尝试过的:

代码语言:javascript
复制
'''
//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日女性

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-12 09:23:33

您可以使用||的功能

代码语言:javascript
复制
entitieslist.Where(stud => 
    (!selectCondition.Age.HasValue || selectCondition.Age == stud.Age)
    && (!selectCondition.Gender.HasValue || selectCondition.Gender== stud.Gender)
    .ToList()
票数 1
EN

Stack Overflow用户

发布于 2019-12-12 09:14:06

我不认为您可以在一个查询中应用所有过滤器。您可以检查非空值,并添加适当的where子句。

A样本如下:

代码语言:javascript
复制
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();

我希望这能帮到你。

票数 1
EN

Stack Overflow用户

发布于 2019-12-12 09:25:45

如果条件为null,则可以返回true。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59300513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档