簡體   English   中英

如何使用c#xelement動態過濾?

[英]How to filter dynamically using c# xelement?

我已經完成了我的搜索,但無法找到解決問題的方法。

我對c#.net有點新鮮。

這是我的問題。 我正在嘗試動態過濾xelement。

屬性的數量和屬性的值是未知的,並且將取決於一些其他例程/過程。

這些我要過濾的屬性名稱,可以是一個或多個要過濾的屬性。

string[] param = new string[] { "techcode", "productgroup", "photolayer" }

我的xml文件采用以下格式:

<?xml version="1.0" encoding="utf-8"?>
<threads>
  <thread techcode="sometech" productgroup="pgroup" 
          photolayer="player" biasewma="-0.05" />
</threads>

如果我硬編碼這樣的東西,我可以成功過濾

IEnumerable<XElement> singlethread = (from el in apcxmlstate.Elements("thread")
  where 
    (string)el.Attribute("techcode") == somevalue
    && (string)el.Attribute("productgroup") == somevalue
    && (string)el.Attribute("photolayer") == somevalue
  select el);

但是,這不是我想要的,因為我不知道我想要過濾哪個屬性。 它將動態生成。

例如,在運行時,我想要過濾的屬性僅為techcode和productgroup。 任何善良的靈魂都會幫我提供建議。

您可以動態構建查詢:

IEnumerable<XElement> query = apcxmlstate.Elements("thread");

foreach(var name in param)
   query = query.Where(t => (string)t.Attribute(name) == someValue);

更新:我認為您的問題是,您嘗試為每個屬性獲取不同的值,而不是單個someValue變量。 但只有最后一個是在lambda中捕獲的。 您需要創建局部變量來存儲每個lambda的值:

IEnumerable<XElement> singlethread = apcxmlstate.Elements("thread"); 

foreach (var name in param) {
   var value = row[name].ToString();
   singlethread = singlethread.Where(t => (string)t.Attribute(name) == value); 
}

暫無
暫無

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

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