我希望查询IEnumerable以根据较低元素中保存的属性对其进行过滤。我不知道元素名称,但知道要查询的属性。
提供更多详情。
此SearchVars类将包含表单上的选定搜索选项。它还包含ObjectType的属性,该属性是XML对象在文件中的标识符。对于以下XML示例,对象类型将为T1
class SearchVars
{
public string ObjectType { get; set; }
public string ClientId { get; set; }
public string CustRef { get; set; }
}
示例XML提取
<root>
<T1>
<FT ClientID="PCL1" />
<T2 CustRef="Cust1">
<T3 Name="Site1">
<TER Error="123" ErrorText="Error 123" />
<TER Error="234" ErrorText="Error 234" />
<T4 SubErr="50420208">
<TSER ID="2199991741074" CHN="1">
<TER Error="567" ErrorText="Error 567" />
</TSER>
</T4>
</T3>
</T2>
</T1>
<T1>
<FT ClientID="PCL1" />
<T2 CustRef="Cust2">
<T3 Name="Site2">
<TER Error="123" ErrorText="Error 123" />
<TER Error="234" ErrorText="Error 234" />
</T3>
</T2>
</T1>
</root>
我会尝试根据ClientID和CustRef搜索Error属性。在搜索方法中,我的初始代码是将所有T1拉入可枚举的。 2个空IF是我将使用LINQ查询过滤搜索变量上的数据的地方。因此,如果ClientID是PCL1,请过滤存在该客户端ID属性值的T1。
public static IEnumerable<XObject> PerformSearch(string xmlData, Models.SearchVars vars)
{
XDocument document = XDocument.Parse(xmlData);
IEnumerable<XObject> result = document.Descendants(vars.ObjectType);
if (! string.IsNullOrEmpty(vars.ClientId))
{
}
if (!string.IsNullOrEmpty(vars.CustRef))
{
}
return result;
}
我希望我所尝试的是清楚的,并期待今天学习一点。 感谢
答案 0 :(得分:0)
这不是我想要的干净解决方案,但它确实有效。对更好的想法非常开放!
class Search
{
public static IEnumerable<XObject> PerformSearch(string xmlData, Models.SearchVars vars)
{
XDocument document = XDocument.Parse(xmlData);
IEnumerable<XObject> result = document.Descendants(vars.ObjectType);
if (! string.IsNullOrEmpty(vars.ClientId))
{
result = from i in result
where i.ToString().Contains(string.Format("ClientId={0}",vars.ClientId))
select i;
}
if (!string.IsNullOrEmpty(vars.CustRef))
{
result = from i in result
where i.ToString().Contains(string.Format("CustRef={0}", vars.CustRef))
select i;
}
return result;
}
}