【问题标题】:Convert SQL to Linq statement in MVC view在 MVC 视图中将 SQL 转换为 Linq 语句
【发布时间】:2021-04-11 04:32:08
【问题描述】:

我试图从我的 MVC 视图中的表中获取一个不同的列表,但它有一个唯一的主键,并且表中有 1000 行。本质上,这是一个包含大量数据的临时表,通过引用 RunID,我可以根据需要移动/更新数据。

用 SQL 术语来说,这就是我需要的

Select a.*,Min([ID]) as 'ID'

From
(
SELECT [Group]
      ,[Entity]
      ,[Enterprise]
      ,[RunID]
  FROM [CashManager].[Upload]

  Group By [RunID],[Group]
      ,[Entity]
      ,[Enterprise]) a

      Left join [CashManager].Upload On a.RunID=[CashManager].Upload.RunID

      GRoup by a.RunID, a.[Group], a.[Entity], a.[Enterprise]

在我看来,我有以下内容

 @foreach (var item in Model.GroupBy(u => new {u.RunId, u.Group, u.Entity, u.Enterprise, u.FileName, u.Timestamp, u.Id }))

现在,当我省略 ID 列(这是主键)时,我得到了我需要的答案(就行而言),但是在编辑等时我需要 ID 值,所以它不起作用。

因此,如果您能帮助我正确理解我的观点,将不胜感激

【问题讨论】:

  • 请不要只发布 SQL 并要求转换。至少显示一个类模型,以便导航属性和关联的多样性是可见的。此外,请说明您的目标是什么类型的 LINQ(针对实体?),并展示您自己的初步努力,以便我们了解具体您需要帮助的地方。最好的 LINQ 查询几乎不是 SQL 查询的 1:1 复制。

标签: sql linq model-view-controller


【解决方案1】:

你必须更正你的 SQL 查询

Select 
   S.[Group],
   S.[Entity],
   S.[Enterprise],
   S.[RunID],
   S.[ID]
FROM
(
  SELECT 
     a.[Group],
     a.[Entity],
     a.[Enterprise],
     a.[RunID],
     a.[ID],
     ROW_NUMBER() OVER (
       PARTTION BY a.[RunID], a.[Group], a.[Entity], a.[Enterprise] ORDER BY a.[ID]
     ) AS RN
  FROM [CashManager].[Upload] a
) S
WHERE S.RN = 1

回答未来的问题:通过纯 EF Core LINQ 是不可能的,因为它不支持窗口函数。

【讨论】:

    【解决方案2】:

    我最终决定走一条不同的路线,并使用 Azure 数据工厂功能解决了我的问题(我已经将它用作我项目的一部分)

    我使用查询来填充我的数据集

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多