私は私の検索を行って、私が持っている問題の解決策を見つけることができませんでした。c#xelementを使用して動的にフィルターをかける方法は?
私はc#.netに少し新しくなりました。
これは私の問題です。動的にxelementをフィルタリングしようとしています。
属性の数と属性の値は不明であり、他のルーチン/プロセスに依存します。
これらの属性名をフィルタリングするには、フィルタリングする属性を1つ以上指定できます。
string[] param = new string[] { "techcode", "productgroup", "photolayer" }
私のxmlファイルがこの形式である:私はので、私しかし、これは、私が欲しいものではありません。この
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);
のようなものをハードコーディング場合
<?xml version="1.0" encoding="utf-8"?>
<threads>
<thread techcode="sometech" productgroup="pgroup"
photolayer="player" biasewma="-0.05" />
</threads>
私が正常にフィルタリングすることができますどの属性を正確にフィルタリングしたいのか分かりません。これは動的に生成されます。
たとえば、実行時にフィルターにかけたい属性はtechcodeとproductgroupのみです。どんな親切な魂が私に提案を提供するのに役立つでしょうか?
IEnumerable<XElement> query = apcxmlstate.Elements("thread");
foreach(var name in param)
query = query.Where(t => (string)t.Attribute(name) == someValue);
UPDATEを::
im申し訳ありません...提案されたソリューションを実行した後、クエリはアクティブなフィルタとして最後のパラメータを取るだけです。例私がparam = {techcode、productgroup}を使用している場合、productgroupのみをフィルタリングします。それでもtechcodeのすべてのデータが返されます。 –
@AmirIsmailでは、このクエリはすべてのフィルタ条件を追加します。あなたは 'query.Where'を毎回元のクエリ –
hiに再度割り当てていないようです。これは私がしたことです 'IEnumerable singlethread = apcxmlstate.Elements(" thread "); foreach(var name in param) { singlethread = singlethread.Where(t =>(文字列)t.Attribute(名前)==行[名前] .ToString()); } 場合(!singlethread.Any()) {// '}} を 他 {//更新スレッドを新しいスレッドを作成しますが、それが更新さを答えに見てみ@AmirIsmail正しく –