Проблема в том, что checkTest
это IEnumerable<String>
, а не строка, поэтому вызов ToString()
также не дает хорошего значения для сравнения.FYI - IEnumerable<T>
- это возвращаемое значение всех основных запросов LINQ, хотя есть способы извлечь первый или последний элементы.
Похоже, вы пытаетесь получить список предварительных условий, соответствующих одному изэлементы в checkTest
Таким образом, вы должны попробовать что-то вроде:
var match = prerequisite.Where(x => checkTest.Contains(x)).Select(item => item);
foreach (var pr in match)
{
MessageBox.Show("this module has a prereq" + pr);
}
РЕДАКТИРОВАТЬ: обновленный ответ на основе предыдущего вопроса по OP
С ответ Я дал вам вчера утром похожую тему, вы используете класс Module
и Dictionary<String,Module>
?Если так, почему вы делаете этот запрос?У вас уже есть все, что нужно для выполнения этого без запроса:
var pr = modules[(String)listBox1.SelectedValue].Prerequisite;
if (pr != "none")
MessageBox.Show("this module has a prereq" + pr);
2nd Edit, чтобы ответить на актуальный вопрос запроса LINQ
В моем предыдущем редактировании предлагалось вернуться кПредыдущие вопросы и предъявление исков к предварительно загруженному XML и коллекции все еще являются лучшим решением, но поскольку ваши вопросы, похоже, возвращаются к использованию LINQ-to-XML, у вас, очевидно, есть причина предпочесть его.
Я выбрал болееподробный взгляд на ваш вопрос, и я думаю, у меня есть проблема.Вы сравниваете 2 элемента, которые никогда не будут совпадать.В своем запросе checkTest
вы выбираете список Names
, у которого есть предварительное требование, но вы пытаетесь сравнить со списком предварительных требований, которые содержат только код.
Вы должны использовать мой запрос, который япредоставляется для проверки совпадений, но вы должны получить checkTest
со следующим:Ваш последний комментарий, запрос, который я вам предоставил, является альтернативной формой запроса LINQ, который я предпочитаю делать меньшим / более коротким запросом.
Вы можете переписать этот запрос, используя синтаксис запроса, который вы использовали как:
var match = from x in prerequisite
where checkTest.Contains(x)
select x;
оператор => называется лямда-выражением.Попробуйте найти синтаксис запроса LINQ и / или лямбда-выражения, чтобы понять разницу