4

我在网上进行了研究,大多数结果都是从 sql 转换为 linq,很少有 linq 到 sql。

这是我要转换为 SQL 的代码:

 using (CommerceEntities db = new CommerceEntities())
    {
    try
      {
      var query = (from ProductOrders in db.OrderDetails
                        join SelectedProducts in db.Products on ProductOrders.ProductID  
                        equals SelectedProducts.ProductID
                        group ProductOrders by new
                            {
                            ProductId = SelectedProducts.ProductID,
                            ModelName = SelectedProducts.ModelName
                            } into grp
                        select new
                            {
                            ModelName = grp.Key.ModelName,
                            ProductId = grp.Key.ProductId,
                            Quantity = grp.Sum(o => o.Quantity)
                            } into orderdgrp where orderdgrp.Quantity > 0 
                        orderby orderdgrp.Quantity descending select orderdgrp).Take(5);

                    RepeaterItemsList.DataSource = query;
                    RepeaterItemsList.DataBind(); 
      }
    catch (Exception exp)
      {
      throw new Exception("ERROR: Unable to Load Popular Items - " + 
                           exp.Message.ToString(), exp);
      }
    }
4

2 回答 2

5

您可以尝试在LinqPad中运行 LINQ 语句。有关如何使用 LinqPad的示例,请在此处查看答案

它有一个选项卡来显示生成的 SQL 语句。

于 2012-07-30T06:59:46.007 回答
2

这是一篇关于登录 LINQ to SQL 的文章。它允许您指定将查询发送到的 TextWriter。

基本上,你可以这样写:

db.Log = new System.IO.StreamWriter("linq-to-sql.log") { AutoFlush = true };

...db您的数据上下文在哪里。

在 SQL 中,你会写这样的东西(尽管生成的代码看起来会有很大不同,因为它是自动生成的):

SELECT TOP 5 Products.ModelName, Products.ProductID, SUM(OrderDetails.Quantity) qty
FROM OrderDetails
INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID
GROUP BY Products.ProductID, Products.ModelName
HAVING qty > 0
ORDER BY qty DESC
于 2012-07-30T07:03:06.087 回答