如何比较2个对象列表并删除不常见的项目?

时间:2010-07-14 09:25:22

标签: c# dynamic .net-4.0

我有2个通用列表,不包含相同类型的所有字段

IList<Category> and List<CategoriesRow>Categories

categoryList = IList<Category>

但两者都有公共字段名称和ID。

我想比较列表类别和categoryList,并从categoryList中找到categoryList [index] .ID在所有ID类别的列表中不存在。对于类别中不存在的所有内容,我将不得不从CatgoryList中删除它们。

我有a previous post in which I was given examples of LINQ,但问题是我必须使用Dynamic,这意味着我将categoryList和Categories作为Dynamic传递。

任何人都可以举例说明如何进行上述操作,因为我不知道该怎么做。

4 个答案:

答案 0 :(得分:0)

首先运行CategoryList的所有列表元素的循环
运行Categories的所有列表元素的内部循环 比较CategoryList [index] .ID的id和Categories [InnerIndex] .ID
当内循环完成时,检查整个循环中的条件是否为真,如果是,那么ID存在于Categories中,否则不存在。

答案 1 :(得分:0)

for (int i = categoryList.Count-1; i >= 0; i--)
{
  int id = categoryList[i].ID;
  if (!Categories.Any(r => r.ID == id)) categoryList.RemoveAt(i);
}

答案 2 :(得分:0)

这可能对您有所帮助

for (int i = 0; i < CategoryList.Count; i++) { 
        if (!CategoryList.Contains(Categories[i]))
            Categories.RemoveAt(i);
        if (!Categories.Contains(CategoryList[i]))
            CategoryList.RemoveAt(i);
    }

答案 3 :(得分:0)

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;
}