如何构建动态linq查询来解决一组约束?

时间:2012-01-16 12:00:31

标签: c# linq dynamic constraints

我正在寻找一种方法来建立一个特殊问题的linq查询。

给定一组变量,如x1,x2,x3 ....,它们可以取整数和一组表达式,如x1> = 5,x2> = 7,Math.Sqrt(x1 + x2) = 8 ....包含一些变量。

我的目的是为变量提供一个解决方案,将表达式考虑在内。

对于给定的示例,您可以创建如下内容:

    var zeroToMaxValue = Enumerable.Range(0, int.MaxValue); 
    var cp = zeroToMaxValue.AsParallel()
        .Where(x1 => x1 >= 5)
        .Select(x1 => new { x1 });
    var cp2=cp
        .SelectMany(query => zeroToMaxValue,(query, x2) => new { query.x1, x2 })
        .Where(query => query.x2 >= 7 && Math.Sqrt(query.x2 + query.x1) == 8);
    var result = cp2.First();
    {
        Console.WriteLine("x1: " + result.x1 + " x2: " + result.x2);
    }

输出为:x1:5 x2:59

有谁知道如何动态创建这种查询 这样我就可以得到满足每个表达式的解决方案。

我已经尝试了PredicateBuilder类并搜索了有关该主题的帖子,例如How do you add dynamic 'where' clauses to a linq query?。但是我没有尝试过任何工作。

我的一个主要问题是,我必须选择许多变量,每个变量都有自己的数字集。这是否正确,这意味着,我必须建立与变量一样多的查询,每个变量都使用查询作为基础,如上例所示?

我能做的最后一件事就是使用stringbuilder构建这类查询,但我希望有人可以帮助我,并且知道更好的方法。

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

var query = //.....

foreach (var constraint in constraints)
{
  query = query.Where(constraint);
}