2010-06-17 6 views
0

를 SQL로 follwing을생성 된 SQL 코드에 따라

생성
ProductPricesDataContext db = new ProductPricesDataContext(); 

var products = from p in db.Products 
       where p.ProductFields.Count > 3 
       select new 
       { 
        ProductIDD = p.ProductId, 
        ProductName = p.ProductName.Contains("hotel"), 
        NumbeOfProd = p.ProductFields.Count, 
        totalFields = p.ProductFields.Sum(o => o.FieldId + o.FieldId) 
       }; 

이유는 제품 이름이 CASE 문이 때문에 대신에 제품 이름이의 난 그냥 내 결과에 0을 얻고있다

SELECT [t0].[ProductId] AS [ProductIDD], 

    (CASE 
     WHEN [t0].[ProductName] LIKE '%hotel%' THEN 1 
     WHEN NOT ([t0].[ProductName] LIKE '%hotel%') THEN 0 
     ELSE NULL 
    END) AS [ProductName], 

    (SELECT COUNT(*) FROM [dbo].[ProductField] AS [t2] WHERE [t2].[ProductId] = [t0].[ProductId]) AS [NumbeOfProd], 
    (SELECT SUM([t3].[FieldId] + [t3].[FieldId]) FROM [dbo].[ProductField] AS [t3] WHERE [t3].[ProductId] = [t0].[ProductId]) AS [totalFields] 

FROM [dbo].[Product] AS [t0] 
WHERE ((SELECT COUNT(*) FROM [dbo].[ProductField] AS [t1] WHERE [t1].[ProductId] = [t0].[ProductId])) > 3 

SQL 세트. .

ProductName = p.ProductName.Contains("hotel"), 

p.ProductName.Contains("hotel") 반환하거나 true : 그것은 다음과 같은 SQL을 생성한다 (여기서 제품 이름 '% 호텔 %'처럼

SELECT [t0].[ProductId] AS [ProductIDD], 
    [ProductName], 
    (SELECT COUNT(*) FROM [dbo].[ProductField] AS [t2] WHERE [t2].[ProductId] = [t0].[ProductId]) AS [NumbeOfProd], 
    (SELECT SUM([t3].[FieldId] + [t3].[FieldId]) FROM [dbo].[ProductField] AS [t3] WHERE [t3].[ProductId] = [t0].[ProductId]) AS [totalFields] 

FROM [dbo].[Product] AS [t0] 

WHERE ((SELECT COUNT(*) FROM [dbo].[ProductField] AS [t1] WHERE [t1].[ProductId] = [t0].[ProductId])) > 3 
AND  t0.ProductName like '%hotel%' 

감사

답변

3

이 행은 문제가있는 곳이다 또는 false 또는 SQL 1 또는 0

where 절에 당신의 선택에단순히 사용

ProductName = p.ProductName, 

Alltogether :

ProductPricesDataContext의 dB = 새로운 ProductPricesDataContext();

var products = from p in db.Products 
      where p.ProductFields.Count > 3 
      where p.ProductName.Contains("hotel") 
      select new 
      { 
       ProductIDD = p.ProductId, 
       ProductName = p.ProductName, 
       NumbeOfProd = p.ProductFields.Count, 
       totalFields = p.ProductFields.Sum(o => o.FieldId + o.FieldId) 
      }; 
+0

ProductNames를 반환해야하는 경우 'hotel'이 (가)이 위치에 추가해야합니까? 그리고이 줄은 ProductName에 'hotel'가 포함되어 반환 된 true 또는 false를 반환합니다. – Kashif

+0

@Muhammad Kashif Nadeem -'Contains' 함수는 부울을 반환합니다. 결과를 제품 이름에 'hotel'가 포함 된 결과로 제한하려는 경우 where 절에 속합니다. 선택할 때 결과 집합에는 where 절과 일치하는 결과 만 포함됩니다. – Oded

관련 문제