gpt4 book ai didi

c# - 通过 lambdas 构造 where 的表达式

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:59 25 4
gpt4 key购买 nike

情况

我有一个接受 POCO 的方法。这个POCO就像下面这样

    private class SearchCriteria
{
public string name get;set;
public string age get;set;
public string talent get;set;
..
....
}

该方法基本上有一个使用上述条件的数据库查询。

public void query(SearchCriteria crit)
{
if(crit.name!=null && crit.age!=null && crit.talent !=null)
{
dbContext.Students.Where(c=>c.name ==crit.name && c.age==crit.age...)
}
else if(crit.name !=null && crit.age!=null)
{
}
else if(....
{
}

如您所见,上面有一个明确的问题,在有大量条件的情况下,我将不得不编写大量 if-elses 以从 where 子句中删除特定参数。

可能的解决方案?

我实际上是 lambda 表达式世界的新手,但我相信我们一定有一个设施可以让我们做下面这样的事情。

dbContext.Students.Where(processCriteria(searchCriteriaPOCO))

你们能引导我走向正确的方向吗?。谢谢

最佳答案

获取可查询对象,然后不断向其中添加 where 子句。这样您只需要测试每个可能的条件一次,并且只生成绝对需要的 where 子句的数量。

IQueryable<Student> q = dbContext.Students.AsQueryable();

if (crit.name != null)
q = q.Where(c => c.name == crit.name);

if (crit.age != null)
q = q.Where(c => c.age== crit.age);

关于c# - 通过 lambdas 构造 where 的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29598652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com