Как сравнить 2 списка объектов и удалить элементы, которые не являются общими? - PullRequest
0 голосов
/ 14 июля 2010

У меня есть 2 общих списка, которые не содержат все поля одного типа

IList<Category> and List<CategoriesRow>Categories

categoryList = IList<Category>

но оба имеют общие поля Имя и Идентификатор.

Я хочу сравнить список категорий с categoryList и найти из categoryList, где categoryList [index] .ID не существует в списке всех категорий ID. Для всех тех, кто не существует в категориях, мне придется удалить их из CatgoryList.

У меня был предыдущий пост, в котором мне приводили примеры LINQ , но проблема в том, что я должен использовать Dynamic, подразумевая, что я передаю categoryList и Categories как Dynamic.

Может ли кто-нибудь дать мне пример того, как действовать выше, поскольку я понятия не имею, как это сделать.

Ответы [ 4 ]

0 голосов
/ 14 июля 2010
public class Category
{
    public int Id;
}

public class CategoriesRow
{
    public int Id;
}

public List<Category> RemoveNotUsedCategories(List<Category> categoryList, List<CategoriesRow> Categories)
{
    List<Category> usedCategories = new List<Category>();

    foreach (Category usableCat in categoryList)
    {
        foreach (CategoriesRow catRow in Categories)
        {
            if (usableCat.Id == catRow.Id)
            {
                // Add categories that are used.
                usedCategories.Add(usableCat);
                // Will break the first loop.
                break;
            }
        }
    }
    return usedCategories;
}
0 голосов
/ 14 июля 2010
for (int i = categoryList.Count-1; i >= 0; i--)
{
  int id = categoryList[i].ID;
  if (!Categories.Any(r => r.ID == id)) categoryList.RemoveAt(i);
}
0 голосов
/ 14 июля 2010

Это может помочь вам

for (int i = 0; i < CategoryList.Count; i++) { 
        if (!CategoryList.Contains(Categories[i]))
            Categories.RemoveAt(i);
        if (!Categories.Contains(CategoryList[i]))
            CategoryList.RemoveAt(i);
    }
0 голосов
/ 14 июля 2010

Сначала запустите цикл всех элементов списка в CategoryList
Запустите внутренний цикл всех элементов списка в Categories
Сравните идентификатор CategoryList [index] .ID с Categories [InnerIndex] .ID
Когда внутренний цикл завершен, проверьте, является ли условие когда-либо истинным во всем цикле, если это так, тогда идентификатор существует в категориях, иначе нет.

...