2014-06-13 3 views
0

조건부로 EF 결과 집합에서 개체를 삭제하는 방법을 설명 할 수 있습니까? 여기 루프에서 조건부 레코드 삭제

내 코드를 사용 DeleteObject이 같이

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q; 
if (newClubKitOrders.Any()) 
{ 
    foreach (NewClubKitOrder order in newClubKitOrders) 
    { 
     if (checkedStatus == true) 
     { 
      order.OrderDate = DateTime.Now; 
     } 
     else 
     { 
      //delete the row (order.delete()) 
     } 
    } 

    newClubKitOrders.SaveChanges(); 
} 

감사

+0

http://stackoverflow.com/questions/17723626/entity-framework-remove-vs -deleteobject –

+0

무엇이 문제입니까? 삭제 방법, 루프? –

답변

3

"foreach"루프에서 'order'를 삭제할 수 없습니다. 따라서 "for"루프를 시도하십시오.

+0

이것은 VS에서 foreach() 내부의 경고를 발생시키지 않지만 실제로 삭제되는지 확실하지는 않습니다. var success = newClubKitOrders.Remove (order); – Slinky

+0

@Slinky 컴파일 될 것입니다. 그러나 실행하려고 할 때 열거 형이 변경되었다고 불평 할 것입니다. – sab669

0

다음 코드를 시도해보고, 다른 목록의 목록을 안전한쪽에 복사했습니다. 이 작업을해야 임시 목록 그냥 통과하는 것입니다하지만 실제 거래는 원래 목록

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q; 

if (newClubKitOrders.Any()) 
{ 
    var TempnewClubKitOrders = newClubKitOrders.ToList(); 

    for(int i=0; i< TempnewClubKitOrders.Length; i++) 
    { 
     if (checkedStatus == true) 
     { 
      newClubKitOrders[i].OrderDate = DateTime.Now; 
     } 
     else 
     { 
      db.NewClubKitOrde.DeleteObject(newClubKitOrders[i]); 
     } 
    } 

    db.SaveChanges(); 
} 
+0

오류 : "linq 표현식에 색인을 적용 할 수 없습니다 .."나는 어떤 이유로 든 배열 인덱서를 사용할 수 없다고 생각합니다. 목록으로 변환 된 이후 이상하게 보입니다. – Slinky

0

에서 발생하는 :

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q; 

if (newClubKitOrders.Any()) 
{ 
    foreach (NewClubKitOrder order in newClubKitOrders) 
    { 
     if (checkedStatus == true) 
     { 
      order.OrderDate = DateTime.Now; 
     } 
     else 
     { 
      db.NewClubKitOrders.Remove(order); 
     } 
    } 

    db.SaveChanges(); 
}