4
我有以下類:C#謂詞建設者用有或
public class testClass
{
public string name { get; set; }
public int id { get; set; }
public int age { get; set; }
}
和下面的代碼:
var list = new List<testClass>();
list.Add(new testClass { name = "name", id = 1, age = 30 });
list.Add(new testClass { name = "name", id = 2, age = 22 });
list.Add(new testClass { name = "name", id = 3, age = 20 });
list.Add(new testClass { name = "name", id = 4, age = 30 });
list.Add(new testClass { name = "name", id = 5, age = 27 });
list.Add(new testClass { name = "name", id = 6, age = 30 });
var qble = list.AsQueryable();
var pred = PredicateBuilder.New<testClass>();
pred.Or(x => x.name == "name" && x.id == 1);
pred.Or(x => x.age == 30);
var predQuery = qble.AsExpandable().Where(pred);
我的目標是創建一個返回所有記錄的查詢,其中:
id = 1 and name = "name"
OR
age = 30
因此,對於上面的查詢,就應該在指數0,1返回的項目,5
對於因爲我想它上面的查詢。
但是,我現在想通過組合一組查詢來構建謂詞,而不是明確定義它們。所以,我現在有以下2個查詢:
var query1 = list.Where(x => x.name == "name" && x.id == 1);
var query2 = list.Where(x => x.age == 30);
,我想建立基於變量query1
和query2
查詢,而無需顯式定義的條件 - 這些條件將被動態定義的,我不知道是什麼他們是,而且他們會被定義在不同的地方。
我的猜測是,我需要做這樣的事情(繼續從上面):
var qble = list.AsQueryable();
var query1 = list.Where(x => x.name == "name" && x.id == 1);
var query2 = list.Where(x => x.age == 30);
var pred = PredicateBuilder.New<testClass>();
pred.Or(query1);
pred.Or(query2);
var predQuery = qble.AsExpandable().Where(pred);
但作謂語,建設者將不接受查詢作爲參數,這是不太正確的。
可以這樣做嗎?
是否有必要單獨查詢? –
@ jonathan.ihm我不確定你的意思? – Alex
這聽起來像是[xy問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你究竟在試圖解決/構建什麼?什麼是「大畫面」? – Igor