0

IEnumerable をクエリして、下位要素に保持されている属性に基づいてフィルター処理しようとしています。要素名はわかりませんが、クエリする属性は知っています。

詳細を説明します。

この SearchVars クラスには、フォームで選択された検索オプションが含まれます。また、ファイル内の XML オブジェクトの識別子である ObjectType のプロパティも含まれています。以下の 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 つの空の 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;
         }

私が試みていることが明確になり、今日少し学ぶことを楽しみにしています. ありがとう

4

1 に答える 1

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;
    }
}
于 2013-04-09T10:01:57.550 に答える