1

データベースに既存のアイテムのセットがありMultiSelectList、Idの1つでShiftを演算子に追加できます。現在、オペレーターには3つのシフトが割り当てられています。これは、ビューで編集され、3から1シフトが削除されます。

既存のアイテムのセットを調べて、選択したアイテムのリストにないものを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 に答える