gpt4 book ai didi

c# - LINQ 如何查询一个值是否在范围列表之间?

转载 作者:太空狗 更新时间:2023-10-30 00:21:44 26 4
gpt4 key购买 nike

假设我在数据库中有一条 Person 记录,并且该人有一个 Age 字段。

现在我有一个页面,允许我过滤特定年龄段的人。

比如我可以选择多个范围选择,比如“0-10”、“11-20”、“31-40”。

所以在这种情况下,我会得到一个 0 到 20 岁之间的人的列表,以及 30 到 40 岁之间的人,但不是 21-30 岁的人。

我获取了年龄范围并填充了如下所示的范围列表:

class AgeRange
{
int Min { get; set; }
int Max { get; set; }
}

List<AgeRange> ageRanges = GetAgeRanges();

我正在使用 LINQ to SQL 进行数据库访问和查询,但我不知道如何查询范围。

我想做这样的事情,但是当然,这行不通,因为我无法根据 SQL 值查询我的本地值:

var query = from person in db.People 
where ageRanges.Where(ages => person.Age >= ages.Min && person.Age <= ages.Max).Any())
select person;

最佳答案

您可以使用 PredicateBuilder 动态构建谓词:

static Expression<Func<Person, bool>> BuildAgePredicate(IEnumerable<AgeRange> ranges)
{
var predicate = PredicateBuilder.False<Person>();
foreach (var r in ranges)
{
// To avoid capturing the loop variable
var r2 = r;
predicate = predicate.Or (p => p.Age >= r2.Min && p.Age <= r2.Max);
}
return predicate;
}

然后您可以按如下方式使用此方法:

var agePredicate = BuildAgePredicate(ageRanges);
var query = db.People.Where(agePredicate);

关于c# - LINQ 如何查询一个值是否在范围列表之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044385/

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