我得到了一个包含多个组合框的表单,其中每个组合框可以设置为不同的值。基于组合框值,我想创建一个查询过滤器。我想迭代所有组合框并将其值添加到过滤器中,如果它不说“全部”。
我想做这样的事情:
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 :(得分: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();
答案 1 :(得分: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简化您的for循环:
var comboBoxes = combArray.Where(c => c.Text != "All");
foreach(var comboBox in comboBoxes)
{
selectedElements = selectedElements.Where(el => el.Element(comboBox .AccessibleName) == comboBox .Text);
}