0
下面的代碼生成的SQL到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)
};
生成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
爲什麼是產品名稱這個CASE語句也正因爲如此,而不是產品名稱我只是在我的結果讓0組。它應該生成SQL像以下(其中產品名稱LIKE '%酒店%'
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%'
感謝
如果必須返回ProductNames包含'酒店'我需要添加此在哪裏? 這條線剛剛返回true或false,返回的ProductName中包含「hotel」或不是? – Kashif 2010-06-17 19:56:58
@Muhammad Kashif Nadeem - 'Contains'函數返回一個布爾值。如果您想將結果限制爲產品名稱包含「酒店」的結果,那麼它屬於where子句。選擇時,結果集只包含與where子句匹配的結果。 – Oded 2010-06-17 19:59:22