C# 使用具有实体框架核心的动态过滤器
我正在开发一个应用程序(.netcore 3.1,C#8),它使用实体框架核心 我想用几个筛选选项筛选一个表 我用JSON获取过滤条件,并将其反序列化为一个对象。我想写一个where LINQ查询,它将根据这些动态过滤选项过滤表 问题是,我需要使用许多选项和组合来管理过滤C# 使用具有实体框架核心的动态过滤器,c#,entity-framework,.net-core,entity-framework-core,asp.net-core-3.1,C#,Entity Framework,.net Core,Entity Framework Core,Asp.net Core 3.1,我正在开发一个应用程序(.netcore 3.1,C#8),它使用实体框架核心 我想用几个筛选选项筛选一个表 我用JSON获取过滤条件,并将其反序列化为一个对象。我想写一个where LINQ查询,它将根据这些动态过滤选项过滤表 问题是,我需要使用许多选项和组合来管理过滤 您可以筛选市场,国家,供应商,其余筛选选项将为空 如果您想筛选国家/地区和供应商,则市场将为空,以及其他筛选选项 我正在查询一个巨大的表,因此编写一个完全转换为SQL的查询非常重要 以下代码工作不正常。我正在寻找类似的方法
- 您可以筛选
,市场
,国家
,其余筛选选项将为供应商
空
- 如果您想筛选
和国家/地区
,则供应商
将为市场
,以及其他筛选选项空
var filters = new demoFilterEntity()
{
Market = new List<string>() { "LAT", "NAM" }
};
var filteredData = demoMainRepository.GetAll().Where(x =>
x.Market != null && (filters.Market != null ? filters.Market.Contains(x.Market) : false) &&
x.Country != null && (filters.Country != null ? filters.Country.Contains(x.Market) : false)).ToList();
var filters=new demoFilterEntity()
{
市场=新列表(){“LAT”,“NAM”}
};
var filteredData=demoMainRepository.GetAll()。其中(x=>
x、 Market!=null&(filters.Market!=null?filters.Market.Contains(x.Market):false)&&
x、 Country!=null&(filters.Country!=null?filters.Country.Contains(x.Market):false)).ToList();
如果您只有
和
条件,可以通过链接Where
子句来实现这一点,我将非常感谢您对如何通过此操作并动态管理筛选的建议。:
var query = demoMainRepository.GetAll().Where(x => x.Market != null);
if(filters.Market != null)
{
query = query.Where(x => filters.Market.Contains(x.Market));
}
...
var filteredData = query.ToList();
也可能说,您需要考虑使用过滤器检查:将字段NULL检查(即“代码> X.Sale.= null < /代码>”组合为:
var query = demoMainRepository.GetAll();
if(filters.Market != null)
{
query = query.Where(x => x.Market != null && filters.Market.Contains(x.Market));
}
...
var filteredData = query.ToList();
使用,您还可以使用
或运算符。@PeterCsala是的,或者自己使用表达式树来构建它=)