C# 从LINQ到sql生成的sql
以下代码C# 从LINQ到sql生成的sql,c#,linq-to-sql,C#,Linq To Sql,以下代码 ProductPricesDataContext db = new ProductPricesDataContext(); var products = from p in db.Products where p.ProductFields.Count > 3 select new { ProductIDD = p.ProductId,
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)
};
生成以下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
为什么这是ProductName的CASE语句,因为它而不是ProductName,所以我的结果集中只有0。它应该生成如下sql(其中ProductName类似于“%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%'
谢谢。这一行就是您遇到问题的地方:
ProductName = p.ProductName.Contains("hotel"),
p.ProductName.Contains(“hotel”)
返回true
或false
,或在SQL1
或0
中返回
将Contains
移动到where
子句,然后在您的选择中使用:
ProductName = p.ProductName,
总而言之:
ProductPricesDataContext db=新的ProductPricesDataContext()
这一行就是您遇到问题的地方:
ProductName = p.ProductName.Contains("hotel"),
p.ProductName.Contains(“hotel”)
返回true
或false
,或在SQL1
或0
中返回
将Contains
移动到where
子句,然后在您的选择中使用:
ProductName = p.ProductName,
总而言之:
ProductPricesDataContext db=新的ProductPricesDataContext()
如果我必须返回包含“hotel”的产品名称,我需要将其添加到Where?这一行只是返回true或false,返回的产品名称是否包含“hotel”?@Muhammad Kashif Nadeem-contains函数返回一个布尔值。如果要将结果限制在产品名称包含
hotel
,则它属于where子句。选择时,结果集将只包含与where子句匹配的结果。如果我必须返回ProductName包含“hotel”,我需要将其添加到where?中,此行仅返回true或false,返回的ProductName是否包含“hotel”?@Muhammad Kashif Nadeem-theContains
函数返回一个布尔值。如果要将结果限制为产品名称包含hotel
的结果,则它属于where子句。选择时,结果集将仅包含与where子句匹配的结果。