Generated sql from LINQ to SQL

Posted by Muhammad Kashif Nadeem on Stack Overflow See other posts from Stack Overflow or by Muhammad Kashif Nadeem
Published on 2010-06-17T19:50:06Z Indexed on 2010/06/17 19:53 UTC
Read the original article Hit count: 254

Filed under:
|

Following code

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)
                };

Generated follwing sql

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

Why is this CASE statement for ProductName and because of this instead of ProductName i am just getting 0 in my result set. It should generate sql like following, (where ProductName like '%hotel%'

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%'

Thanks.

© Stack Overflow or respective owner

Related posts about c#

Related posts about linq-to-sql