C# 使用lambda C应用过滤器(如果有效)#
我试图在.net Core 2.2应用程序中使用entity和lambda为C# 使用lambda C应用过滤器(如果有效)#,c#,linq,lambda,C#,Linq,Lambda,我试图在.net Core 2.2应用程序中使用entity和lambda为Get()方法构建一个过滤器 我正在通过postman提交一些数据,并尝试根据过滤后的参数进行提取,在进行调试时,它们会按照应该的方式进行处理,但最终的结果是对象的完整列表,因为根本没有过滤器 我正在使用内存数据库,因为我还没有任何可用的数据库 我错过了什么 public List<Analysis> Get(Analysis filter) { #region Filter Validation
Get()
方法构建一个过滤器
我正在通过postman提交一些数据,并尝试根据过滤后的参数进行提取,在进行调试时,它们会按照应该的方式进行处理,但最终的结果是对象的完整列表,因为根本没有过滤器
我正在使用内存数据库,因为我还没有任何可用的数据库
我错过了什么
public List<Analysis> Get(Analysis filter)
{
#region Filter Validation
IQueryable<Analysis> analysis = dbContext.Analysis;
if (!string.IsNullOrEmpty(filter.BusinessLine))
analysis.Where(a => a.BusinessLine == filter.BusinessLine);
if (!string.IsNullOrEmpty(filter.Requisition))
analysis.Where(a => a.Requisition == filter.Requisition);
if (!string.IsNullOrEmpty(filter.Clue))
analysis.Where(a => a.Clue == filter.Clue);
if (filter.DateFrom.HasValue)
analysis.Where(a => a.CreationDate >= filter.DateFrom);
if (filter.DateTo.HasValue)
analysis.Where(a => a.CreationDate <= filter.DateTo);
if (!string.IsNullOrEmpty(filter.Text))
{
analysis.Where(a => a.Requisition.Contains(filter.Text) ||
a.InsuranceClaimCity.Contains(filter.Text));
}
#endregion
return analysis.ToList();
}
公共列表获取(分析过滤器)
{
#区域过滤器验证
IQueryable analysis=dbContext.analysis;
如果(!string.IsNullOrEmpty(filter.BusinessLine))
其中(a=>a.BusinessLine==filter.BusinessLine);
如果(!string.IsNullOrEmpty(filter.requision))
其中(a=>a.requision==filter.requision);
如果(!string.IsNullOrEmpty(filter.Clue))
其中(a=>a.Clue==filter.Clue);
if(filter.DateFrom.HasValue)
其中(a=>a.CreationDate>=filter.DateFrom);
if(filter.DateTo.HasValue)
analysis.Where(a=>a.CreationDate a.requision.Contains(filter.Text)||
a、 InsuranceClaimCity.Contains(filter.Text));
}
#端区
返回分析。ToList();
}
您应该将Where方法的结果再次存储在变量中。Where返回一个已更改的集合,而不是更改当前集合。您应该将Where方法的结果再次存储在变量中。Where方法返回一个已更改的集合,而不是更改当前集合。Where方法返回一个实现了IEnumerable
的新实例,它不会更改原始集合。如果要继续使用相同的变量,则应使用赋值
var analysisList = analysis.ToList();
analysisList = analysisList.Where(a => a.BusinessLine == filter.BusinessLine);// make this assignment for all the rest of filtering.
Where方法返回一个实现
IEnumerable
的新实例,它不改变原始集合。如果要继续使用相同的变量,则应使用赋值
var analysisList = analysis.ToList();
analysisList = analysisList.Where(a => a.BusinessLine == filter.BusinessLine);// make this assignment for all the rest of filtering.
您忘记了作业
analysis=analysis.Where(…
您忘记了作业analysis=analysis.Where(…