2012-04-09 5 views
0

하나의 쿼리로 다음 쿼리를 다시 작성할 수있는 방법이 있습니까?1 개의 쿼리 Linq에 하위 쿼리 결합

try 
      { 
       var fileIds = (from f in context.SignalTo 
           where f.SignalFileID == 2 
           select new { f.GFileID }).ToList(); 



       foreach (var id in fileIds) 
       { 
        var pp = (from p in context.ProjectFiles 
            where p.FileID == id.GFileID && p.ProjectID == ProjectID 
            select p); 

        if (pp != null) 
        { 
         ProjectFiles projectFile =(ProjectFiles) pp; 
         projectFile.MStatus = Status; 
         projectFile.DateLastUpdated = DateTime.Now; 
         context.SaveChanges(); 
        } 


       } 
      } 
+0

당신은 사용할 필요가 설정 한'new' 구문을 선택 - 그래도 난 해결책을 차려 드려야하기에 충분 구문에 익숙하지 않다. – Alain

+0

select new를 사용했습니다. –

답변

1

당신은 하나에 코드의 두 쿼리 부품을 결합 할 수 있습니다.

그런 다음 결과 세트를 반복하여 업데이트해야합니다. 그런 다음 context.SaveChanges를 호출하여 모든 변경 사항을 하나의 배치에 제출합니다.

기존의 코드가 실제로 실행 또는 컴파일하면 내가 말할 수는 없지만, 이런 식으로 뭔가가 필요합니다

var fileIds = from f in context.SignalTo 
       where f.SignalFileID == 2 
       select f.GFileID; 

fileIds :

관심있는 파일 ID의 목록을 가져 오기를은이 시점에서 T가 Int라고 가정하는 IQueryable입니다. 검색어가 아직 제출되지 않았습니다.

지금 당신은 여전히 ​​쿼리가 실행되지

var pps = from p in context.ProjectFiles 
     where fileIds.Contains(p.FileID) && p.ProjectID == ProjectID 
     select p; 

을 할 수 있습니다.

이 그런 결과를 반복은

foreach(var pp in pps) // query executed now 
{ 
    pp.MStatus = Status; 
    pp.DateLastUpdated = DateTime.Now; 
} 

context.SaveChanges(); // batch of updates executed now