У меня неожиданное поведение с функцией .Contains () предложения where в Linq to XML.Кажется, он работает как "==", а не Contains () в строковой функции.
Пример:
var q = from sr in SearchResults.Descendants("Result")
where _filters.Contains((string)sr.Element("itemtype"))
orderby (string)sr.Element("ipitemtype") ascending
select new SearchItem
{
//Create Object
ID = (string)sr.Element("blabla"),
}
_filters - это список строк.Допустим, он содержит 3 значения:
_filters[0] = "videos";
_filters[1] = "documents";
_filters[2] = "cat pictures";
Что происходит сейчас, так это то, что запрос работает отлично, если
<itemtype>videos</itemtype>
является узлом XML.
Однако, если узел является
<itemtype>videos mission critical document advertising</itemtype>,
, IEnumerable возвращает пустое значение, которое мне говорит, что операнд работает как "==", а не "Contains ()".
Есть идеи, что я делаю не так?
Победный ответ от dtb:
заменить
where _filters.Contains((string)sr.Element("itemtype"))
на
where _filters.Any(filter => ((string)sr.Element("itemtype")).Contains(filter))