gpt4 book ai didi

C# - 如何在对象列表上执行多个包含过滤器

转载 作者:行者123 更新时间:2023-11-30 14:47:45 27 4
gpt4 key购买 nike

我有一个数据表,我正在尝试对其列实现服务器端过滤。我允许每个列查询多个字符串,并试图确定逐步通过所有过滤器的最佳方式。下面是表格对象的示例,为了简单起见,只有 2 个参数。

//table models from db
public class Parts
{
public string PartName { get; set; }
public virtual Series Series { get; set; }
}

public class Series
{
public string SeriesName { get; set; }
}

//This is what is passed in from the datatable filter query
public class PartsTable
{
public string PartName { get; set; }

public string SeriesName { get; set; }
}


public IEnumerable<Parts> PartsTableSearch(PartsTable table)
{
//Queries come in as comma separated string
var partNameList = table.PartName?.Split(',');
var seriesNameList = table.SeriesName?.Split(',');

//Gets and generates the list of Parts
var fullList = GetParts();

if (partNameList != null && partNameList.Length > 0)
{
foreach (var partName in partNameList)
{
fullList = fullList.Where(p => p.PartName.ToLower().Contains(name.ToLower()));
}
}
if (seriesNameList != null && seriesNameList.Length > 0)
{
foreach (var seriesName in seriesNameList)
{
fullList = fullList.Where(p => p.Series.SeriesName.ToLower().Contains(seriesName.ToLower()));
}
}

return fullList;
}

这对我想要的不起作用,因为对于每个参数(即 PartName),我需要能够返回所有具有包含 partNameList 中的搜索字符串的 PartName 的对象,然后从该结果中过滤进一步在包含 seriesNameList 中的搜索字符串的 SeriesNames 上,然后返回结果集。但是,partNameList 的查询可能是空白的,只能搜索 seriesName,反之亦然。有什么建议么?我觉得这是一个明显的答案,我只是忽略了,尽管我搜索过的任何其他内容都只适用于单个查询过滤器。提前致谢。

最佳答案

这可以使用单个 .Where 以两种方式完成:

使用 .Contain() 将返回完全匹配:

public IEnumerable<Parts> PartsTableSearch(PartsTable table)
{
//Queries come in as comma separated string
var partNameList = table.PartName?.Split(',');
var seriesNameList = table.SeriesName?.Split(',');

//Gets and generates the list of Parts
var fullList = GetParts()
.Where(p => partNameList.Contains(p.PartName.ToLower())
|| seriesNameList.Contains(p.Series.SeriesName.ToLower()))
.ToList();

return fullList;
}

使用 .Any() 将返回部分匹配:

public IEnumerable<Parts> PartsTableSearch(PartsTable table)
{
//Queries come in as comma separated string
var partNameList = table.PartName?.Split(',');
var seriesNameList = table.SeriesName?.Split(',');

//Gets and generates the list of Parts
var fullList = GetParts()
.Where(p => partNameList.Any(n => n.Contains(p.PartName.ToLower())))
|| seriesNameList.Any(n => n.Contains(p.Series.SeriesName.ToLower())))
.ToList();

return fullList;
}

关于C# - 如何在对象列表上执行多个包含过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545597/

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