gpt4 book ai didi

c# - 如何在循环中构建动态linq表达式树

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:39 25 4
gpt4 key购买 nike

给定以下字符串数组:

string[] ranges = new string[]{"0-100", "100-200", "500-1000"};

我想在 linq 表达式中动态地表达这一点——类似于:

var query = from p in Db.Products()
where p.Amount() >= 0
where p.Amount() <= 100
where p.Amount() >= 101
where p.Amount() <= 200
where p.Amount() >= 500
where p.Amount() <= 1000
select p;

我知道如何从数组中提取值,所以这不是问题,但更重要的是我如何在 for 循环中动态构建 linq 表达式:

string[] ranges = new string[]{"0-100", "100-200", "500-1000"};

foreach (var item in ranges)
{
int min = int.Parse(item.Split('-').First());
int max = int.Parse(item.Split('-').Last());
//Linq expression?
}

最佳答案

像这样:

IQueryable<Product> query = DB.Products();
foreach (var item in ranges)
{
int min = int.Parse(item.Split('-').First());
int max = int.Parse(item.Split('-').Last());
query = query.Where(p => p.Amount() >= min && p.Amount() <= max);
}

(我只得到了你所拥有的 where 子句的一半,但它是等价的。如果你真的想要,你可以将它分解。)

请注意返回到 query 的赋值 - 像 Where 这样的方法返回一个 new 查询,它是将操作应用于 现有查询;它们不会更改现有查询中的任何内容。

关于c# - 如何在循环中构建动态linq表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718805/

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