我正在开发一个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
答案 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);