簡體   English   中英

根據條件LINQ TO XML C#選擇元素

[英]Select elements based on condition LINQ TO XML C#

我正在使用LINQ TO XML查詢XML。 我想基於一些條件檢查來查詢記錄,這是我的XML:XML將有多個Orders每個訂單都在我要選擇的訂單中,其param節點屬性存儲值不為null,如果存在,則應為1,並且也為order帶有紙箱信息...

    <orders>
        <order>
            <criteria>
                <param name="location">123</param>
                <param name="name">Chicago</param>
                <param name="Store">1</param>
                <param name="Account Number">1212121212</param>
            </criteria>
            <items>
                <item> </item>
                <item> </item>           
            </items>
            <cartons>
                <carton>
                     <size> </size>
                     <weight></weight>
                </carton>
            </cartons>
        </order>
    <Order>
    </Order>
    </orders>

我可以做到這一點:

var result = from item in doc.Descendants("order")
                where item.Element("criteria").Element("param").Attribute("name").Value.Contains("store") == true
                && item.Element("cartons") != null
                select item;"

如果我的store(param)屬性在過濾器節點中的第一個位置,則上述方法效果很好,但是如果我將store(param)屬性移動到除第一個位置以外的其他位置,則它不會對其進行過濾

問題在於您僅查看一個 param元素-始終是第一個param元素,因為這就是Element所做的。

如果要匹配的任何參數是值為1的“ Store”元素,則要使用Any方法並使用Elements查找所有參數:

var query = from item in doc.Descendants("order")
            where item.Element("criteria").Elements("param")
                      .Any(p => p.Attribute("name").Value == "Store" &&
                                (int) p == 1)
                  && item.Element("cartons") != null
            select item;

查詢表達式在這里並沒有真正幫助您-我會使用:

var query = doc.Descendants("order")
               .Where(item => item.Element("criteria").Elements("param")
                                  .Any(p => p.Attribute("name").Value == "Store" &&
                                            (int) p == 1)
                              && item.Element("cartons") != null);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM