使用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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用ReSharper将Linq转换为代码

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用SQL将行转换为列

来自分类Dev

使用LINQ将DataRow转换为字典

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用ReSharper将Linq转换为代码

来自分类Dev

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

来自分类Dev

使用Notepad ++将CSV转换为SQL

来自分类Dev

使用MAX将SQL转换为LINQ

来自分类Dev

使用Linq将实体转换为XML

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用 LEFT OUTER JOIN 将 SQL 转换为 LINQ

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    使用ReSharper将Linq转换为代码

  6. 6

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

  7. 7

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

  8. 8

    使用SQL将行转换为列

  9. 9

    使用LINQ将DataRow转换为字典

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

    使用ReSharper将Linq转换为代码

  19. 19

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

  20. 20

    使用Notepad ++将CSV转换为SQL

  21. 21

    使用MAX将SQL转换为LINQ

  22. 22

    使用Linq将实体转换为XML

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

    使用 LEFT OUTER JOIN 将 SQL 转换为 LINQ

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档