给出以下字符串arrray:
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?
}
答案 0 :(得分:5)
像这样:
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
等方法会返回新查询,这是将操作应用于现有的结果查询;它们不会更改现有查询中的任何内容。
答案 1 :(得分:1)
尝试使用以下代码:
var result= from range in ranges
select new
{
min = int.Parse(range.Split('-').First()),
max = int.Parse(range.Split('-').Last())
};
结果包含所有最小值和最大值....