2012-03-07 56 views
1

我试图将以下SQL语句转换为linq查询,但出于某种原因,我无法使其工作!将SQL查询转换为Linq Lambda语句

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’是不是在这种情况下使用。”指的是“新组合”线。关于如何解决这个

非常感谢

+0

你尝试过这么远吗?而“不起作用”不是错误描述!不编译?它会抛出一个运行时异常吗?它运行但返回错误的结果? – 2012-03-07 14:58:32

+0

它是Linq-to-Sql还是Linq-To-Entities?它们不是同一件事。 – cadrell0 2012-03-07 15:02:01

+0

嗨,对不起,它是实体的LINQ。我不是故意单击Linq到SQL – user789433 2012-03-07 15:23:13

回答

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(), 
      }; 
+0

哇,这是非常快的感谢非常感谢,我现在会测试这个。 – user789433 2012-03-07 15:20:17

+0

你好我编码在VB等纷纷改变了这种稍微摆脱VS显示错误,我有 昏暗castleavailability = _ 由邻订单_ 从我在inventorys _ 其中(x> = o.ITEMID = x.ItemId) 将新的{o,i}由o.ItemId转换为oi 选择新的{ItemId = oi.Key,Count = oi.Select(y => yoItemId).Count(),Quantity = oi。选择(y => yiQuantity).Max()} 我收到错误类型或'与'预计在'组新'{' 谢谢 – user789433 2012-03-07 15:33:49

+0

@ user789433 - 对不起,我不在VB代码。 – Aducci 2012-03-07 15:58:04

0

您还可以使用Linqer软件到SQL查询转换到LINQ查询LAMBDA。

您可以从以下链接获得该软件:

http://www.sqltolinq.com/

+0

我正在使用Linqer,但无法找到任何选择将SQL转换为使用Lambda表达式的Linq,只是经典的Linq – AlexGH 2016-07-27 16:56:04