Во-первых, у меня есть перечисление как
internal enum property_name
{
label = 1
,
from = 2
,
to = 3
,
forwardTo = 4
}
Во-вторых, у меня есть класс, который ссылается на перечисление на самом внутреннем вложенном классе _property
internal class cls_xml_filters
{
internal string title { get; set; }
internal List<_entry> entry { get; set; }
internal class _entry
{
internal string category { get; set; }
internal string id { get; set; }
internal DateTime updated { get; set; }
internal List<_property> property { get; set; }
internal class _property
{
internal property_name name { get; set; }
internal string value { get; set; }
}
}
}
Класс _property может иметь один или много записей, и _property.name не всегда содержит все значения enum property_name.
Я хочу найти все уникальные _entries.id, где имя_свойства не существует в _entry._property.name. Я уже сделал запрос, в котором я нахожу все записи, где _property.name существует в _entry
List<string> filters_search_results = var_xml_filters.entry
.SelectMany(m => m.property
.Where(w => w.name == find_property_name), (m, w) => string.Join(" : ", new[] { m.id, w.value }))
.Distinct()
.OrderBy(o => o)
.ToList();
, но я понятия не имею, как сделать обратное, поскольку я не могу использовать! Содержит, поскольку это принесет вернуть все свойства всех записей, которые не равны параметру find_property_name; find_property_name имеет тип имя_свойства enum. Если я не выполняю приведение ToString () к w.name, я вообще не имею доступа к Contains (), потому что property_name не содержит определения для Contains (), и если я выполняю приведение ToString (), как показано ниже , он возвращает все свойства
List<string> filters_search_results= var_xml_filters.entry
.SelectMany(m => m.property.Where(w => !w.name.ToString().Contains(find_property_name.ToString())), (m, w) => string.Join(" : ", new[] { m.id , "no value" }))
.Distinct()
.OrderBy(o => o)
.ToList();
Итак, чтобы уточнить мой вопрос:
Если у меня есть
property_name find_property_name = property_name.from;
Я хочу только _entry. id, если ни одно из имен List <_property> не содержит find_property_name.
Я не знаю, как это сделать; пожалуйста помоги. Спасибо.
РЕДАКТИРОВАТЬ
Пример XML (с удалением реальных значений и заменой их фиктивными данными)
<cls_xml_filters>
<title>title</title>
<entry>
<category>category</category>
<id>001</id>
<updated>2020-03-14T20:04:34Z</updated>
<property>
<name>label</name>
<value>value</value>
</property>
<property>
<name>from</name>
<value>value</value>
</property>
<property>
<name>to</name>
<value>value</value>
</property>
<property>
<name>forward</name>
<value>value</value>
</property>
</entry>
<entry>
<category>category</category>
<id>002</id>
<updated>2020-03-14T20:04:34Z</updated>
<property>
<name>from</name>
<value>value</value>
</property>
<property>
<name>to</name>
<value>value</value>
</property>
</entry>
<entry>
<category>category</category>
<id>003</id>
<updated>2020-03-14T20:04:34Z</updated>
<property>
<name>forward</name>
<value>value</value>
</property>
</entry>
</cls_xml_filters>
В примере выше, я ищу найти _entry.id, где ни одно из свойств не содержит "label". Он должен вернуть List<string>
со значениями 002 и 003, потому что ни одно из свойств в этих двух не содержит никаких свойств, имеющих перечисление enum.