2013-07-29 8 views
5

私は私の検索を行って、私が持っている問題の解決策を見つけることができませんでした。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を::

答えて

6

あなたは、動的にクエリを構築することができ、私はあなたの問題ではなく、単一のsomeValue変数のあなたは属性ごとに異なる値を取得しようとしているということだと思います。しかし最後のものだけがラムダで捕らえられます。それぞれのラムダの値を格納するローカル変数を作成する必要があります。

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); 
} 
+0

im申し訳ありません...提案されたソリューションを実行した後、クエリはアクティブなフィルタとして最後のパラメータを取るだけです。例私がparam = {techcode、productgroup}を使用している場合、productgroupのみをフィルタリングします。それでもtechcodeのすべてのデータが返されます。 –

+0

@AmirIsmailでは、このクエリはすべてのフィルタ条件を追加します。あなたは 'query.Where'を毎回元のクエリ –

+0

hiに再度割り当てていないようです。これは私がしたことです 'IEnumerable singlethread = apcxmlstate.Elements(" thread "); foreach(var name in param) { singlethread = singlethread.Where(t =>(文字列)t.Attribute(名前)==行[名前] .ToString()); } 場合(!singlethread.Any()) {// '}} を 他 {//更新スレッドを新しいスレッドを作成しますが、それが更新さを答えに見てみ@AmirIsmail正しく –

関連する問題