Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询IEnumerable<;XObject>;包含未知元素的_C#_Xml_Linq - Fatal编程技术网

C# 查询IEnumerable<;XObject>;包含未知元素的

C# 查询IEnumerable<;XObject>;包含未知元素的,c#,xml,linq,C#,Xml,Linq,我希望查询一个IEnumerable,根据下面元素中的属性对其进行过滤。我不知道元素名,但知道要查询的属性 提供更多细节 此SearchVars类将包含表单上选定的搜索选项。它还包含ObjectType的属性,ObjectType是文件中XML对象的标识符。对于下面的XML示例,对象类型为T1 class SearchVars { public string ObjectType { get; set; } public string ClientId

我希望查询一个IEnumerable,根据下面元素中的属性对其进行过滤。我不知道元素名,但知道要查询的属性

提供更多细节

此SearchVars类将包含表单上选定的搜索选项。它还包含ObjectType的属性,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搜索错误属性。在搜索方法中,我的初始代码是将所有T1拉入一个可枚举项。在2个空IFs中,我将使用LINQ查询过滤搜索变量上的数据。因此,如果ClientID是PCL1,则过滤存在该客户机ID属性值的T1s

         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;
         }
公共静态IEnumerable性能搜索(字符串xmlData,Models.SearchVars)
{
XDocument document=XDocument.Parse(xmlData);
IEnumerable结果=document.subjects(vars.ObjectType);
如果(!string.IsNullOrEmpty(vars.ClientId))
{
}
如果(!string.IsNullOrEmpty(vars.CustRef))
{
}
返回结果;
}
我希望我所尝试的是清楚的,并期待着今天学习一点。
谢谢

这不是我想要的那种干净的解决方案,但它确实有效。对更好的想法非常开放

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;
    }
}
类搜索
{
公共静态IEnumerable性能搜索(字符串xmlData,Models.SearchVars vars)
{
XDocument document=XDocument.Parse(xmlData);
IEnumerable结果=document.subjects(vars.ObjectType);
如果(!string.IsNullOrEmpty(vars.ClientId))
{
结果=结果中的i
其中i.ToString()包含(string.Format(“ClientId={0}”,vars.ClientId))
选择i;
}
如果(!string.IsNullOrEmpty(vars.CustRef))
{
结果=结果中的i
其中i.ToString()包含(string.Format(“CustRef={0}”,vars.CustRef))
选择i;
}
返回结果;
}
}