我正在开发一个使用 Entity Framework Core 的应用程序(.Net Core 3.1,C# 8)。
我想使用多个过滤选项来过滤表。
我获取 JSON 格式的过滤条件,并将其反序列化为一个对象。我想编写一个 where LINQ 查询,它将根据这些动态过滤选项来过滤表。
问题是我需要使用许多选项和组合来管理过滤。
- 您可以过滤
market
, country
, vendor
其余的过滤器选项将是null
.
- 您想要过滤
country
and vendor
那么market
将null
以及其余的过滤器选项。
我正在查询一个巨大的表,因此编写一个完全转换为 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();
我希望得到关于如何解决这个问题并动态管理过滤的建议。
如果你只有AND
条件你可以通过链接来做到这一点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();
Also as @拉约斯·阿帕德 https://stackoverflow.com/users/436560/lajos-arpad说也许你需要考虑组合字段空检查(即x.Market != 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)