我正在尋找一種方法來構建特殊問題的linq querys。給定是一組變量,如x1,x2,x3 ....,它們可以取一個整數和一組表達式,如x1> = 5,x2> = 7,Math.Sqrt(x1 + x2 )= 8 ....包含一些變量。如何構建動態LINQ查詢以解決一組約束?
我的意圖是爲需要考慮表達式的變量獲得解決方案。
對於一個給定的例子,你可以創建這樣的事情:
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×2:59
有誰知道怎麼做造成這種querys動態 使我得到了滿足每個表達式的解決方案。
我已經嘗試過PredicateBuilder類並搜索了關於該主題的帖子,如How do you add dynamic 'where' clauses to a linq query?。但是我沒有嘗試過。
我的一個主要問題是,我必須選擇許多變量,每個變量都有自己的一組數字。這是否意味着,我必須建立儘可能多的查詢,因爲有變量,每個都使用前面的查詢作爲基礎,就像上面的例子一樣?
我能做的最後一件事是用stringbuilder構建這些查詢,但我希望有人能幫助我,並且知道更好的方法。
感謝您的回答!
看看[LINQ到Z3 - 理論解的類固醇(http://community.bartdesmet.net/blogs/bart/archive/2009/09/27/linq-to-z3-theorem -solving-on-steroids-part-1.aspx) – Eranga 2012-01-16 12:12:07