【问题标题】:SQL into LINQ... need a nudge in the right directionSQL 到 LINQ... 需要朝着正确的方向轻推
【发布时间】:2012-03-16 16:30:36
【问题描述】:

我想将 LINQ 用作 DataGrivdView 数据源...我有正确的 SQL 查询,但我在 LINQ 中重新编写它有很多时间...

SQL:

SELECT ICITEM.ITEMNO, ICITEM.[DESC], MAX(PORCPL.DTARRIVAL) AS Expr1
FROM   ICITEM INNER JOIN
        PORCPL ON PORCPL.ITEMNO = ICITEM.ITEMNO
WHERE  (ICITEM.ITEMNO LIKE '%R001%')
GROUP BY ICITEM.ITEMNO, ICITEM.[DESC]

我在 LINQ 的微弱尝试:

    Dim s = From items In db.ICITEMs
    Where items.ITEMNO.Contains(Me.txtQuery.Text) Or items.DESC.Contains(Me.txtQuery.Text)
    Join recDates In db.PORCPLs On items.ITEMNO Equals recDates.ITEMNO
    Select [Item_ID] = items.ITEMNO, [Description] = items.DESC, [rd] = recDates.DTARRIVAL

我的 LINQ 日志...

SELECT [t0].[ITEMNO] AS [Item_ID], [t0].[DESC] AS [Description], [t1].[DTARRIVAL] AS [rd]
FROM [dbo].[ICITEM] AS [t0]
INNER JOIN [dbo].[PORCPL] AS [t1] ON [t0].[ITEMNO] = [t1].[ITEMNO]
WHERE ([t0].[ITEMNO] LIKE @p0) OR ([t0].[DESC] LIKE @p1)
-- @p0: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [%r001%]
-- @p1: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [%r001%]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

我不知道如何在 [rd] 字段上获得 Max 函数...任何见解将不胜感激。

【问题讨论】:

    标签: sql vb.net linq translate


    【解决方案1】:

    您需要添加Group By。 这是一个应该有帮助的例子:

    Dim s = From items In db.ICITEMs
    Where items.ITEMNO.Contains(Me.txtQuery.Text) Or items.DESC.Contains(Me.txtQuery.Text)
    Join recDates In db.PORCPLs On items.ITEMNO Equals recDates.ITEMNO
    Group By items.ITEMNO, items.DESC Into MaxArrivalDate = Max(recDates.DTARRIVAL)
    Select [Item_ID] = items.ITEMNO, [Description] = items.DESC, [rd] = MaxArrivalDate
    

    【讨论】:

    • 哦,非常感谢...太多小时,我已经迷失在这上面了。这完美!
    【解决方案2】:

    您的 linq 查询中有一个额外的 Contains。如果这是正确的,这里是带有 group by 和 max 的完整 linq 查询:

    Dim s = From items In db.ICITEMs
    Where items.ITEMNO.Contains(Me.txtQuery.Text) Or items.DESC.Contains(Me.txtQuery.Text)
    Join recDates In db.PORCPLs On items.ITEMNO Equals recDates.ITEMNO
    Group By items.ITEMNO, items.DESC Into Group
    Let MaxArrival = Group.Max(Function(p) p.recDates.DTARRIVAL)
    Select [Item_ID] = ITEMNO, [Description] = DESC, [rd] = MaxArrival
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多