使用group by将SQL转换为LINQ

祖雷洛德

我很想尝试将以下sql转换为linq:

SELECT t.* FROM(SELECT mwfieldid,MAX([TimeStamp]) AS MaxValue, BatchDocumentID
   FROM mw_BatchField 
   GROUP BY mwfieldid,BatchDocumentID) x
  JOIN mw_BatchField t ON x.mwfieldid = t.mwfieldid
   AND x.MaxValue = t.TimeStamp
   and x.BatchDocumentID = t.BatchDocumentID 

到目前为止,我必须将其转换为存储的proc才能正常工作。我宁愿知道如何在linq中正确编写此代码。我尝试使用sql到linq转换器(http://www.sqltolinq.com/),该转换器产生的代码中有错误:(这些转换器有什么用吗?几次尝试似乎都没有产生任何有用的作用) )

From x In ( 
    (From mw_BatchFields In db.mw_BatchFields
    Group mw_BatchFields By 
      mw_BatchFields.MWFieldID,
      mw_BatchFields.BatchDocumentID
     Into g = Group 
    Select 
      MWFieldID,
      MaxValue = CType(g.Max(Function(p) p.TimeStamp),DateTime?),
      BatchDocumentID)
    )
Join t In db.mw_BatchFields
      On New With { .MWFieldID = CInt(x.MWFieldID), .MaxValue = CDate(x.MaxValue), .BatchDocumentID = CInt(x.BatchDocumentID) }
  Equals New With { .MWFieldID = t.MWFieldID, .MaxValue = t.TimeStamp, .BatchDocumentID = t.BatchDocumentID }
Select 
  BatchFieldID = t.BatchFieldID,
  BatchDocumentID = t.BatchDocumentID,
  MWFieldID = t.MWFieldID,
  TimeStamp = t.TimeStamp,
  value = t.value,
  DictionaryValue = t.DictionaryValue,
  AutoFilled = t.AutoFilled,
  employeeID = t.employeeID

对于这样一个简单的查询,似乎需要很多代码,并且无法编译。

斯托夫罗兹

因此,对于mwfieldid和BatchDocumentID的每种组合,您都希望该行的所有列都具有最高的时间戳?在LINQ中,这比SQL表示起来要容易得多,因此,对于自动转换器进行处理,我并不感到惊讶。

您应该能够:

Mw_BatchFields.GroupBy(x => new { x.Mwfieldid, x.BatchDocumentId })
    .SelectMany(x => x.Where(y => y.TimeStamp == x.Max(z => z.TimeStamp)))

如果组中有多行共享相同的最大时间戳,则此命令(如您的SQL)将为每个分组键返回多行。如果只希望每个键行,则可以使用:

Mw_BatchFields.GroupBy(x => new { x.Mwfieldid, x.BatchDocumentId })
    .Select(x => x.OrderByDescending(y => y.TimeStamp).First())

编辑:对不起,只是纠结于您正在VB中工作,而不是C#,所以不是您要找的东西,但是如果您可以使用lambda语法样式,我想上面的内容可以翻译为:

Mw_BatchFields.GroupBy(Function(x) New With {x.Mwfieldid, x.BatchDocumentId}).Select(Function(x) x.OrderByDescending(Function(y) y.TimeStamp).First())

和:

Mw_BatchFields.GroupBy(Function(x) New With {x.Mwfieldid, x.BatchDocumentId}).SelectMany(Function(x) x.Where(Function(y) y.TimeStamp = x.Max(Function(z) z.TimeStamp)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用sum和group by将sql查询转换为linq

来自分类Dev

使用案例将SQL group by和order by转换为Linq

来自分类Dev

使用MAX将SQL转换为LINQ

来自分类Dev

将SUM / CASE WHEN / GROUP BY SQL查询转换为LINQ

来自分类Dev

将包含GROUP BY的SQL Server查询转换为NHibernate LINQ

来自分类Dev

将T-Sql的Group转换为Linq转换为Sql

来自分类Dev

如何在日期时间的仅日期部分使用GROUP BY将SQL查询转换为Linq?

来自分类Dev

使用 sum 和 group by 条件将 SQL 查询转换为 linq/lambda 表达式

来自分类Dev

使用groupby,sum和count将SQL转换为Linq

来自分类Dev

使用Linq to SQL将FieldExpression转换为LambdaExpression时出错

来自分类Dev

使用crm早期绑定类将linq转换为sql

来自分类Dev

使用LINQ TO SQL将查询转换为对象

来自分类Dev

使用crm早期绑定类将linq转换为sql

来自分类Dev

使用Linq to SQL将FieldExpression转换为LambdaExpression时出错

来自分类Dev

使用groupby,sum和count将SQL转换为Linq

来自分类Dev

使用 LEFT OUTER JOIN 将 SQL 转换为 LINQ

来自分类Dev

将查询转换为动态 SQL 时使用 GROUP BY 出错

来自分类Dev

使用ReSharper将Linq转换为代码

来自分类Dev

使用LINQ将DataRow转换为字典

来自分类Dev

使用ReSharper将Linq转换为代码

来自分类Dev

使用Linq将实体转换为XML

来自分类Dev

我正在尝试使用“ Not IN”将SQL查询转换为Linq到实体

来自分类Dev

在C#中使用Linq到SQL将匿名类型转换为列表<T>

来自分类Dev

可以使用dart将linq lambda表达式转换为SQL吗?

来自分类Dev

LINQ 使用 DTO 将 SQL 服务器日期时间转换为字符串

来自分类Dev

如何使用单个字段连接将 SQL 转换为 LINQ?

来自分类Dev

如何使用max和group by将tsql转换为linq并返回String []

来自分类Dev

使用SQL将行转换为列

来自分类Dev

使用Notepad ++将CSV转换为SQL

Related 相关文章

  1. 1

    使用sum和group by将sql查询转换为linq

  2. 2

    使用案例将SQL group by和order by转换为Linq

  3. 3

    使用MAX将SQL转换为LINQ

  4. 4

    将SUM / CASE WHEN / GROUP BY SQL查询转换为LINQ

  5. 5

    将包含GROUP BY的SQL Server查询转换为NHibernate LINQ

  6. 6

    将T-Sql的Group转换为Linq转换为Sql

  7. 7

    如何在日期时间的仅日期部分使用GROUP BY将SQL查询转换为Linq?

  8. 8

    使用 sum 和 group by 条件将 SQL 查询转换为 linq/lambda 表达式

  9. 9

    使用groupby,sum和count将SQL转换为Linq

  10. 10

    使用Linq to SQL将FieldExpression转换为LambdaExpression时出错

  11. 11

    使用crm早期绑定类将linq转换为sql

  12. 12

    使用LINQ TO SQL将查询转换为对象

  13. 13

    使用crm早期绑定类将linq转换为sql

  14. 14

    使用Linq to SQL将FieldExpression转换为LambdaExpression时出错

  15. 15

    使用groupby,sum和count将SQL转换为Linq

  16. 16

    使用 LEFT OUTER JOIN 将 SQL 转换为 LINQ

  17. 17

    将查询转换为动态 SQL 时使用 GROUP BY 出错

  18. 18

    使用ReSharper将Linq转换为代码

  19. 19

    使用LINQ将DataRow转换为字典

  20. 20

    使用ReSharper将Linq转换为代码

  21. 21

    使用Linq将实体转换为XML

  22. 22

    我正在尝试使用“ Not IN”将SQL查询转换为Linq到实体

  23. 23

    在C#中使用Linq到SQL将匿名类型转换为列表<T>

  24. 24

    可以使用dart将linq lambda表达式转换为SQL吗?

  25. 25

    LINQ 使用 DTO 将 SQL 服务器日期时间转换为字符串

  26. 26

    如何使用单个字段连接将 SQL 转换为 LINQ?

  27. 27

    如何使用max和group by将tsql转换为linq并返回String []

  28. 28

    使用SQL将行转换为列

  29. 29

    使用Notepad ++将CSV转换为SQL

热门标签

归档