比较存在于一个而不是另一个中的列表和值

时间:2014-07-21 10:57:18

标签: c# .net

我正在开发一个MVC 5 Web应用程序 - 我有一个屏幕,用户可以勾选网格上的复选框,这会将数据保存到数据库。我现在需要实现的是,如果用户导航回屏幕并取消选中其中一个项目然后继续,则删除数据。

所以到目前为止我的控制器中的代码如下所示:

IEnumerable<string> splitSelectedCars = model.SelectedCars
                                             .Split(',')
                                             .Select(sValue => sValue.Trim());

if (cars.Count > 0)
{
    IEnumerable<string> savedCarsInDb = cars.Select(c => c.Id).ToList();

    //var merged = splitSelectedCars.Union(savedCarsInDb ,)

    //puesdo code - for each value in merged call service layer to remove 

}

我不确定使用union是否是最好的方法,可以从模型中找到splitSelected cars列表中不在savedCarsInDb列表中的所有值,如果是,那么IEqualityComparer看起来应该是什么样的?

因此,第一次将示例列表传递给模型1,2,3,4 - 拆分然后保存到DB。如果用户导航回来并选择id 4,那么splitSelected将有1,2,3和savedCarsInDb仍然有1,2,3,4 - 所以我需要找到'4'然后调用remove

1 个答案:

答案 0 :(得分:1)

LINQ可以在这里为您提供帮助,特别是the Except method

var selected = model.SelectedCars.Split(',').Select(sValue => sValue.Trim());
var saved = cars.Select(c => c.Id).ToList();
var removed = saved.Except(selected);

根据您是否希望套管敏感,您可以传入适当的字符串比较器:

var removed = saved.Except(selected, StringComparer.OrdinalIgnoreCase);