2012-11-20 2 views
1

데이터베이스에있는 항목 중 MultiSelectList의 Id 's가 Shift 키를 사용하여 교환 원에 추가 할 수있는 항목이 있습니다. 현재 운영자에게는 3 개의 교대가 지정되어 있습니다. 이제보기에서 3 시프트 1을 제거하는보기에서 편집합니다.LINQ 및 EF를 사용하여 데이터베이스에서 값을 제거하는 방법

기존 항목 세트를 검토하고 제거 할 항목 중 3 개를 선택 목록에서 찾을 수있는 가장 좋은 방법은 무엇입니까? 항목.

나는 가장 쉬운 방법은 연산자에 대한 데이터베이스의 모든 항목을 제거하고 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 
+0

제거 "무엇을 의미합니까 데이터베이스의 값 "? 데이터베이스에서 실제 레코드를 "삭제"하거나 표시 될 때 값을 생략하는 것을 의미합니까? –

답변

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 
    }); 
} 
+0

이것은 정말 멋진 해결책이었습니다. 고맙습니다. 나는 DBA와상의 했었고, 삭제와 추가의 양이 한 번에 최소가 될 것이기 때문에 모든 것을 제거하는 데 전혀 해를 끼치 지 않고 새로운 것을 추가하기 때문에. 이제 행과 거래 수백만의 경우 .... – iamchrisfryer

0

나는 작업을 할 수있는 간단한 방법을 발견했다.

관련 문제