2012-10-04 4 views
0
using (Entities PlatfrmName = new Entities()) 
{ 
    foreach (string selectedProject in SplitSelectedprojects) 
    { 
     var platformId = from platformID in PlatfrmName.AppProjects84 
         where platformID.ProjectName == selectedProject 
         select platformID.PlatformId; 

         var platformName = from platfrmName in PlatfrmName.AppPlatforms84 
              where platfrmName.PlatformId.ToString() == platformId.ToString() 
              select platfrmName.PlatformName; 
         //Get the projects based on the platforms 
         if (platformName.ToString() == "Base") 
          BASE += selectedProject + ","; 
         if (platformName.ToString() == "Windows") 
          WINDOWS += selectedProject + ","; 
         if (platformName.ToString() == "Web") 
          WEB += selectedProject + ","; 
         if (platformName.ToString() == "Wpf") 
          WPF += selectedProject + ","; 
         if (platformName.ToString() == "Silverlight") 
          SILVERLIGHT += selectedProject + ","; 
         if (platformName.ToString() == "Mvc") 
          MVC += selectedProject + ","; 
    } 
} 

결과가 platformName == Base 인 것으로 예상하고 해당 프로젝트를 BASE 변수에 추가해야합니다. 컨트롤이 if (platformName.ToString() == "Base")으로 오면 커서를 가리키면 아무것도 표시되지 않습니다. 누구든지이 일을 도와 줄 수 있어요.쿼리가 예상 결과를 생성하지 않습니다.

+0

여기 n + 1 데이터베이스 요청 문제에주의하십시오. foreach 루프 내에서 linq 쿼리를 수행 할 때 SQL을 프로파일 링해야합니다. –

답변

0

두 번째 쿼리의 결과는 Platform 개체이지만 IQueryable은 아닙니다. 따라서 ToString은 예상 한 문자열을 반환하지 않습니다. 또한 두 번째 쿼리 (아마도 첫 번째 쿼리)는 실행을 강제하는 것은 없으므로 (즉, 평가가 없음) 데이터베이스에 대해 전혀 실행되지 않습니다. 나는 또한 당신이 2 대신 하나의 쿼리를 가질 수 있다고 생각합니다. 이 같은 것은 :

var platformName = (from platform in PlatfrmName.AppProjects84 
        where platformID.ProjectName == selectedProject 
        select platform.PlatformName).Single(); 

트릭 - 먼저, 두 개의 쿼리를 결합해야합니다. 둘째, .Single()을 사용하여 쿼리를 강제로 평가합니다. 이렇게하면 결과를 얻기 위해 쿼리가 데이터베이스로 전송됩니다. 주어진 프로젝트에 대해 단 하나의 결과 만 기대한다고 가정하고 따라서 Single()을 사용했습니다. .Single()의 결과는 단일 개체이며 IEnumerable이 아니므로 platformName을 가져올 수 있어야합니다. 또한 platformName이 string 인 경우 .ToString()을 사용할 필요가 없습니다.

관련 문제