gpt4 book ai didi

c# - 如何忽略搜索条件中的空属性

转载 作者:行者123 更新时间:2023-11-30 15:36:52 25 4
gpt4 key购买 nike

我有一个不好的要求要做;无论如何,我必须在我的应用程序中实现它。

我有一个Track

public class Track
{
public string Name { get; set; }
public string City { get; set; }
public string Country { get; set; }
}

我有一些测试数据

List<Track> Records = new List<Track>
{
new Track { City = "a", Name = "a", Country = "i" }, // Track 1
new Track { City = "b", Name = "b", Country = "i" }, // Track 2
new Track { City = "a", Name = null, Country = "J" }, // Track 3
new Track { City = "c", Name = "a", Country = "J" }, // Track 4
new Track { City = "b", Name = "a", Country = null}, // Track 5
};

要求是我应该根据传递的值从 Records 中查询数据。如果任何属性为 null,则搜索条件应忽略该属性。它应该根据 NonNull 属性进行查询。

示例:

If i query for City = a, Name = "b", Country = "i" then Result is: Track 1 & Track 3
If i query for City = c, Name = "p", Country = "w" then Result is: Track 4

NameCountryTrack 3Track 5 中有空值。所以它会在搜索中忽略.希望清楚

我终于找到了以下逻辑

var filterRecords = new List<Track>();
if (!Records.Any(t => string.IsNullOrWhiteSpace(t.City)))
{
filterRecords = Records.Where(c => c.City == _city).ToList(); // Here _city is the method parameter.. assume "a"
}

if (!Records.Any(t => string.IsNullOrWhiteSpace(t.Country)))
{
filterRecords = filterRecords.Where(c => c.City == _country).ToList(); // Here _country is the method parameter.. assume "c"
}

Track 类有 12 个属性。像上面那样检查 12 次不是好兆头。我想通过使用 LINQ 或任何其他简单的方法来实现这一点。

有什么建议吗?

最佳答案

我想到的最佳解决方案是构建聚合过滤器(您可以为此使用 Track 对象,因为它已经具有用于过滤集合的所有可能属性,并且它们可以为 null):

Track filter = records.Aggregate(
new Track() { City = _city, Country = _country, Name = _name },
(f, t) => new Track()
{
City = String.IsNullOrEmpty(t.City) ? null : f.City,
Country = String.IsNullOrEmpty(t.Country) ? null : f.Country,
Name = String.IsNullOrEmpty(t.Name) ? null : f.Name
},
f => f);

这将只需要对集合进行一次迭代来定义哪些字段为空。然后简单地对您的记录应用过滤器:

var query = from t in Records
where (filter.City == null || t.City == filter.City) &&
(filter.Country == null || t.Country == filter.Country) &&
(filter.Name == null || t.Name == filter.Name)
select t;

关于c# - 如何忽略搜索条件中的空属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293511/

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