2011-06-07 52 views
0

我得到了一個包含多個組合框的表單,其中每個組合框可以設置爲不同的值。基於組合框的值,我想創建一個查詢過濾器。我想遍歷所有組合框,並將其值添加到過濾器,如果它不說「全部」。基於組合框值生成xml-to-linq查詢過濾器C#

我想要做這樣的事情:

XElement root = XElement.Load(fileName); 
        IEnumerable<XElement> selectedElements = 
         from el in root.Elements("OrderNum").Elements("ServiceJob") 
         where 
          for(int i = 0; i < combArray.GetLength(0); i++) 
          { 
           if(combArray[i].Text != "All") 
           { 
            (string)el.Element(combArray[i].AccessibleName) == combArray[i].Text && 
           } 
          } 
         select el; 

有什麼建議?

回答

0

您只需動態地添加Where子句如下:

XElement root = XElement.Load(fileName); 
IEnumerable<XElement> selectedElements = root.Elements("OrderNum").Elements("ServiceJob"); 

for(int i = 0; i < combArray.GetLength(0); i++) 
{ 
    if(combArray[i].Text != "All") 
    { 
     selectedElements = selectedElements.Where(el => el.Element(combArray[i].AccessibleName) == combArray[i].Text); 
    } 
} 

var result = selectedElements.ToList(); 

for循環的每次迭代,將前查詢並附加一個合適的WHERE子句。

對於「加分」可以簡化您的使用LINQ循環:

var comboBoxes = combArray.Where(c => c.Text != "All"); 
foreach(var comboBox in comboBoxes) 
{ 
    selectedElements = selectedElements.Where(el => el.Element(comboBox .AccessibleName) == comboBox .Text); 
} 
+0

謝謝,這解決了我的問題:)(至少是一個我問了一下)。然而,這些過濾器有點「'和」的聯繫?如果我想將其切換爲「或」語句,該怎麼辦?那可能嗎? – Amund 2011-06-08 07:28:16

0

事情是這樣的:

IEnumerable<XElement> query = root.Elements("OrderNum").Elements("ServiceJob"); 
for(int i = 0; i < combArray.GetLength(0); i++) 
{ 
    if(combArray[i].Text != "All") 
     query = query.Where(arg => arg.Element(combArray[i].AccessibleName) == combArray[i].Text) 
} 
var result = query.ToList();