Я сравниваю 2 списка, и мне нужно собирать вхождения подмножества (modulesToDelete) из главного списка (allModules) ТОЛЬКО, когда найдено более одного вхождения. (allModules содержит modulesToDelete). Множество вхождений любого модуля в modulesToDelete означает, что эти модули совместно используются. Одно вхождение модуля в modulesToDelete означает, что модуль изолирован и безопасен для удаления (он просто обнаружил себя). Я могу сделать это с помощью вложенных циклов по каждому элементу, но это, насколько я с выражением LINQ (который не работает) собирать:LINQ: сравнить два списка и подсчитать подсети
List<Module> modulesToDelete = { A, B, C, K }
List<string> allModules = {R, A, B, C, K, D, G, T, B, K } // need to flag B and K
var mods = from mod in modulesToDelete
where allModules.Any(name => name.Contains(mod.Name) && mod.Name.Count() > 1)
select mod;
здесь мой вложенный цикл просмотра, которые я хочу, чтобы заменить с помощью LINQ выражение:
foreach (Module mod in modulesToDelete)
{
int count = 0;
foreach (string modInAllMods in allModules)
{
if (modInAllMods == mod.Name)
{
count++;
}
}
if (count > 1)
{
m_moduleMarkedForKeep.Add(mod);
}
else if(count == 1)
{
// Delete the linked modules
}
}
Спасибо! Это заставляет меня возглавить в правильном направлении. Я добавил еще несколько примеров данных и пробовал это: ... safeToDelete = allModules.Where (m => m ....); –
@TanHur: взгляните на мой добавленный подход, который еще проще. –
Я пробовал несколько вариантов, но я всегда получаю это: mods = {A, B, C, K, B, K} Мне нужно это: mods = {B, K} –