2010-01-29 4 views
9

2 개의 LINQ 문 미만이어야합니다. 둘 다 (겉으로보기에) 동일한 결과 집합을 반환합니다. 누구든지 내가 왜 한 방향으로 다른 방향을 사용해야하는지 설명 할 수 있습니까? "You say potato, I say potato; you say tomato, I say tomato"처럼 간단합니까? >LINQ, 중첩 된 SELECT에 가입하거나 사용해야합니까?

1) 두 lets 아래 ID를 가지고 이름을 반환한다 전용 방법 - 여기서

는 LINQ의 두 가지 종류이다.

var business = from businesse in context.tblBusinesses 
       where businesse.BusinessID == businessID 
       join addresse in context.tblAddresses on businesse.BusinessID equals addresse.BusinessID 
       let stateName = GetStateNameByID(addresse.StateID) 
       let countyName = GetCountyNameByID(addresse.CountyID) 
       select new 
       { 
        businesse.BusinessName, 
        businesse.ContactName, 
        businesse.EmailAddress, 
        addresse.AddressLine1, 
        addresse.AddressLine2, 
        addresse.AddressLine3, 
        addresse.CityName, 
        State = stateName, 
        addresse.ZipCode, 
        addresse.ZipPlus, 
        County = countyName 
       }; 

2)

var query = from businesse in context.tblBusinesses 
      where businesse.BusinessID == businessID 
      select new 
      { 
       businesse.BusinessName, 
       businesse.ContactName, 
       businesse.EmailAddress, 
       Address = from addresse in businesse.tblAddresses 
          select new 
          { 
           addresse.AddressLine1, 
           addresse.AddressLine2, 
           addresse.AddressLine3, 
           addresse.CityName, 
           State = addresse.StateID, 
           addresse.ZipCode, 
           addresse.ZipPlus, 
           County = addresse.tblAdminCounty 
          } 
      }; 

답변

1

같은 결과를 얻었습니까?

Address 속성을 여러 속성으로 병합하는 첫 번째 예제처럼 보이고 두 번째 예제에는 속성이 포함 된 Address 속성이있는 것처럼 보입니다.

그러나 그렇지 않은 경우, 가입과 "내부 선택"의 차이점은 개인적인 취향의 문제라고 말합니다. 나는 아마도 SQL을 쓰는 데 익숙해 져서 단어가 join 인 데서 당신의 의도가 분명해지기 때문에 합류하기를 선호합니다. 하지만 내부 선택을 사용하여 문제가 보이지 않습니다.

+0

"같은 결과가 나옵니까?" - 필드가 동일한 가치 (즉, 둘 다 State = CA)를 가졌다 고 말했을 때, 속성을 사용하는 방식에 차이가 있는지를 이해해야합니다. –

6

당신은 SQL 서버 프로파일을 볼 때, 당신은 두 번째는 많은 쿼리를 생성하지만, 첫 번째는 한 쿼리에서 모든 데이터를 얻을 것을 알 수있다. 그래서 첫 번째가 더 효율적입니다.

+1

Jon Skeet과 동의하는쪽으로 기울어 져 있었기 때문에, 그것은 어쨌든 저에게 놀랍습니다. –

+0

그래, @NetSide? – devuxer

+4

예 각 비즈니스에 대해 주소에 대한 sql 쿼리를 만듭니다. 나는 비슷한 경험을했다. LINQ를 사용하고 있다면 항상 SQL 프로파일 러를 열어 두십시오. – NetSide

관련 문제