将SQL查询转换为Linq Lambda语句

时间:2012-03-07 14:52:20

标签: vb.net linq entity-framework linq-to-entities

我正在尝试将以下SQL语句转换为linq查询但由于某种原因我无法使其工作!!

SELECT     o.ITEMID, COUNT(o.ITEMID) AS COUNT, MAX(i.QUANTITY) AS Quantity
FROM       ORDERS AS o LEFT OUTER JOIN
           INVENTORY AS i ON o.ITEMID = i.ITEMID
           GROUP BY o.ITEMID

我找到了this link,有人有类似的问题,但我似乎无法将其应用于我需要的东西。


感谢您的帮助。

这是我到目前为止的代码

Dim castleavailability = _
            From o In orders _
            From i In inventorys _
            Where (x >= o.ITEMID = i.ITEMID)
            Group New With {o, i} By o.ITEMID Into oi()
            Select New With {.ItemId = oi.Key, .Count = oi.Select(y >= y.o.ItemId).Count(), .Quantity = oi.Select(y >= y.i.Quantity).Max()}

我现在得到的错误是“在这种情况下无法访问方法'oi'的定义。”指的是“新组合”。有关如何解决此问题的任何想法

非常感谢

2 个答案:

答案 0 :(得分:4)

这应该对你有用

var query = from o in context.Orders
            from i in context.Inventory
                             .Where(x = > o.ItemId = x.ItemId)
                             .DefaultIfEmpty()
            group new { o, i } by o.ItemId into oi
            select new
            {
              ItemId = oi.Key,
              Count = oi.Select(y => y.o.ItemId).Count(),
              Quantity = oi.Select(y => y.i.Quantity).Max(),
            };

答案 1 :(得分:0)

您还可以使用Linqer软件将sql查询转换为Linq Lambda查询。

您可以通过以下链接获取此软件:

http://www.sqltolinq.com/