Zrobiłem moje poszukiwania i nie byłem w stanie znaleźć rozwiązania problemu, który mam.Jak filtrować dynamicznie za pomocą C# xelement?
Jestem trochę nowy w C# .net.
Oto mój problem. Próbuję dynamicznie filtrować xelement.
Liczba atrybutów i wartość atrybutów nie są znane i będą zależeć od innej procedury/procesu.
Moja nazwa atrybutu do filtrowania, może być jednym lub więcej atrybutem do filtrowania.
string[] param = new string[] { "techcode", "productgroup", "photolayer" }
mój plik xml jest w tej postaci:
<?xml version="1.0" encoding="utf-8"?>
<threads>
<thread techcode="sometech" productgroup="pgroup"
photolayer="player" biasewma="-0.05" />
</threads>
można filtrować pomyślnie gdybym sztywno coś takiego
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);
Jednakże, nie jest to, co chcę, bo nie będzie wiedział, który atrybut dokładnie chcę filtrować. Będzie generowany dynamicznie.
Na przykład w czasie wykonywania atrybut, który chcę filtrować, to tylko kod techcode i productgroup. Czy jakakolwiek dusza pomoże mi w dostarczeniu sugestii.
Przykro mi ... Po uruchomieniu sugerowanego rozwiązania, zapytanie pobiera ostatni parametr jako aktywny filtr. Przykład, jeśli używam param = {techcode, grupa produktów}, to tylko filtruj grupę produktów. Nadal zwraca wszystkie dane do techcode. –
@AmirIsmail nie, to zapytanie dodaje wszystkie warunki filtrowania. Wygląda na to, że nie przypisujesz ponownie zapytania "query.Where" za każdym razem do oryginalnego zapytania: –
. to właśnie zrobiłem: 'IEnumerable singlethread = apcxmlstate.Elements (" thread "); foreach (nazwa var w parametrze) { singlethread = singlethread.Where (t => (string) t.Attribute (name) == row [name] .ToString()); } if (! Singlethread.Any()) {// utworzyć nowy wątek} else {// wątek aktualizacji} ' ale nie tworzy go poprawnie –