2011-06-07 48 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();