2014-04-22 2 views
3

레코드가 데이터베이스 테이블에는 있지만 목록에 포함 된 업데이트 된 레코드에는 없는지 확인하는 데 문제가 있습니다. 레코드가 업데이트 된 목록 내에 존재하지 않지만 데이터베이스 테이블 내에서 레코드가 존재하면 레코드를 삭제해야합니다.Linq를 사용하여 레코드가 목록에 존재하지 않지만 테이블에 존재하는지 확인

테이블을 쿼리하여 수정되었는지 확인하고 레코드가 데이터베이스 테이블에 없으면 업데이트 할 수 있지만 그 반대의 경우 조금 더 까다 롭습니다. 또 다른 제약은 내가 레코드의 삭제를 적절하게 처리 할 수 ​​있도록 exist = true 및 not exist = false의 부울 값으로 결과가 필요하다는 것입니다.

bool exists = db.table.Any(t => t.EntityID != list.EntityID) 

을하지만 역을 관리 할 수없는 것 :

나는 레코드가 데이터베이스 테이블에 존재하지 않는 경우 결정하기 위해이 일을하고있다.

목록 및 데이터베이스 테이블에는 Entity Framework를 사용하여 1 : 1 매핑이 있습니다.

레코드가 데이터베이스에는 있지만 목록에는없는 경우 삭제하십시오.

답변

8

논리를 뒤집은 것처럼 보입니다. 특정 레코드의 존재를 확인하려는 경우의 ID가 list.EntityID에 저장되고, 그것은 다음과 같습니다

bool exists = db.table.Any(t => t.EntityID == list.EntityID); 

당신이 개체의 목록을 가지고 있고 존재하는 모든 레코드를 찾으려면 목록에 존재하지 않는 데이터베이스에서이 작업을 수행 할 수 있습니다 : 당신이 DeleteAllOnSubmit()에 전달할 수있는 개체의 목록을 제공합니다

var extraitems = db.table.Where(t => !list.Select(l => l.EntityID).Contains(t.EntityID)); 

합니다.

+0

데이터베이스에 "존재하지 않지만"목록에 존재하는 레코드를 찾으려면 어떻게해야합니까? –

+2

@AnilPurswani에 따라 다릅니다. 리스트가 작고 테이블이 커지면'var extraitems = list.Where (l =>! db.table.Select (t => t.EntityID). 포함 (t.EntityID)); 목록이 크고 테이블이 작 으면 먼저 테이블에서 ID를 가져 오는 것이 더 빠를 것입니다. – Corey

+0

내가 제안한 두 번째 옵션을 따라 주셔서 감사합니다 ... –

0
bool exists = db.table.Any(t => list.EntityID.Contains(t.EntityID)) 
+0

답변을 설명해 주시겠습니까? 현재 불완전합니다. – bjb568

관련 문제