2009-06-23 2 views
0

FileTable에서 "Pending"열이 false로 설정되고 파일 FileID가 트랜잭션 테이블에 존재하지 않으면 파일이 "처리 중"입니다. 기본적으로 내가 말하는 LINQ 쿼리를 만들 수있는 방법테이블에 존재하지 않는 조건에서이 LINQ 쿼리를 수행하려면 어떻게합니까?

,

f.Pending == 거짓 & &에

부분을 (f.ID! =은 db.Transactions.FileID에 존재하는) 경우 괄호는 어떻게해야할지 모르겠다. 나는 별도의 쿼리에서이를 수행 할 수 있지만 한 가지 쿼리에서이를 우아하게 처리하는 방법이 있음을 알고 있습니다.

public IEnumerable<PlacementFile> getProcessingPlacementFiles() 
     { 
      using (LinqModelDataContext db = new LinqModelDataContext()) 
      { 
       var placementFiles = from f in db.Placement_Files 
            where (f.Pending == false && (f.ID does not exist in db.Transactions.FileID)) 
            orderby f.Import_Date descending 
            select f; 

       return placementFiles; 

      } 

이 나는이 FileTable 및 트랜잭션 테이블에 가입해야 할 경우가 : 여기

는 지금까지이 무엇인가? 누군가 나를 통해 이것을 안내 할 수 있습니까?

답변

1

사용 :

적어도 논리적으로 작동합니다
where !f.Pending && !db.Transactions.Any(trans => trans.ID == f.ID) 

- 당신은 물론 :)

0

이 원하는 경우입니다, 그것은 올바른 SQL을 생성 여부를 확인해야합니다 Any() 확장 메소드를 사용하려면 다음과 같이하십시오.

public IEnumerable<PlacementFile> getProcessingPlacementFiles() 
{ 
    using (LinqModelDataContext db = new LinqModelDataContext()) 
    { 
     return from f in db.Placement_Files 
       where (!f.Pending && !db.Transactions 
             .Any(t => t.FileID == f.ID) 
       orderby f.Import_Date descending       
       select f; 
    } 
} 
관련 문제