1

我在数据库中有一组现有的项目,其中一个MultiSelectListID 允许将班次添加到操作员。目前,操作员分配了 3 个班次。现在在视图上对其进行编辑,以从 3 中删除 1 Shift。

遍历现有项目集并确定要删除的 3 个项目中的哪一个在选定项目列表中找不到的最佳方法是什么。

我知道最简单的方法是为 Operator 删除数据库中的所有项目,然后从 MultiSelectList 中插入值,但我认为可能有一种方法可以使用 LINQ 从 Id 列表中没有的现有位置中进行选择

var existing = (from os in db.OperatorShifts
                where os.OperatorId == model.Id
                select os);

public List<Guid?> Shifts { get; set; }
public MultiSelectList AvailableShifts { get; set; }

model.Shifts
4

2 回答 2

3
//asuming your db has these fields: db.Shifts, db.OperatorShifts
//and model is the current Operator

var existingShifts = (from os in db.OperatorShifts
                where os.OperatorId == model.Id
                select os).ToList();

IEnumerable<Guid> newShiftIds = ?; //don't now how your selected shift ids got post back, figure it out yourself

var shiftsToRemove = existingShifts.Where(e => newShiftIds.All(id => e.Id != id)).ToList();
var shiftIdsToAppend = newShiftIds.Where(id => exising.All(e => e.Id != id)).ToList();

foreach(var shift in shiftsToRemove)
{
    db.OperatorShifts.Remove(shift);
}

foreach(var shiftId in shiftIdsToAppend)
{
    db.OperatorShifts.Add(new OperatorShift{
        OperatorId = model.Id,
        ShiftId = shiftId
    });
}
于 2012-11-20T15:51:02.767 回答
0

我发现执行此类任务的最简单方法是从数据库中删除所有项目,然后将我想要的项目重新插入。

于 2012-11-20T16:11:06.247 回答