Как я могу использовать PredicateBuilder для Linq to XML - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь найти XML-файл и сравнить имя атрибута из списка ключевых слов во время выполнения. Я использовал DelegatePredicateBuilder как предложено в этом посте: Привязка к объектам Predicate Builder .

XML-файл выглядит следующим образом и должен искать значения атрибута name.

 <group name="Install Software">...</group>

Результат всегда возвращает false. Когда я проверяю p, он говорит, что p не существует. Когда я изучаю предикат, он показывает следующее.

predicate   {Method = {Boolean <Or>b__2(System.Xml.Linq.XElement)}} System.Func<System.Xml.Linq.XElement,bool>

Мне нравится знать, как можно увидеть содержимое предиката. Вызов метода заключается в следующем. Поставляемое ключевое слово "Install", поэтому оно должно найти, но не.

    private IEnumerable<XElement> FindAttribute(XElement doc, String attributeType, String attributeName, List<string> KeywordList)
    {
        var predicate = DelegatePredicateBuilder.False<XElement>();
        foreach (string keyword in keywordList)
        {
            string temp = keyword;
            predicate = predicate.Or(p => (p.Attribute(attributeName).Value).ToString().Contains(temp));
        }
        var groupResult = doc.DescendantsAndSelf(attributeType)
                      .Where(predicate);
        if (groupResult.Count() == 0)
            return null;
        else
            return groupResult;
    }

Я был бы признателен, если бы кто-то указал мне верное направление. Кстати, это мой первый пост, и я учусь, как правильно его публиковать.

...