【问题标题】:transform sql to linq with join, group-by and where使用 join、group-by 和 where 将 sql 转换为 linq
【发布时间】:2013-01-02 19:59:37
【问题描述】:

我有以下 sql,我想将其转换为 linq

SELECT Contrato.finca, SUM(Pago.Importe_subtotal)
FROM Pago, Contrato
WHERE Pago.Contrato = Contrato.ID AND Pago.pagado = 1
GROUP BY Contrato.finca
ORDER BY 2 DESC
GO

我现在在 linq 中的内容如下,但 group by 不起作用。

var x = from contrato in ctx.Contratos 
        join pago in ctx.Pagos
        on contrato.ID equals pago.Contrato 
        where pago.pagado == true 
        group contrato by contrato.finca
        select contrato.Finca1;

【问题讨论】:

  • 使用Linq的时候需要join吗?如果您的实体模型设置正确,则相关实体应该是一个属性。您的数据库架构是什么样的?
  • 不起作用... 什么 不起作用?
  • 这是一个属性。它在 Finca1
  • Pago 是您的实体模型中 Contrato 的属性吗?
  • 你能贴一张你的数据库模型图,让我看看这些项目是如何相关的吗?

标签: c# linq join group-by aggregate


【解决方案1】:

认为这应该可行:

ctx.Pagos.Where(m=>m.pagado==true).GroupBy(m=>m.Contrato.finca) 
    .Select(m=> new { Id= m.Key, Val= m.Sum(n => n.Importe_subtotal)})

【讨论】:

  • 我添加了一个“)”来关闭总和。这种语法对我来说是全新的。你有任何链接,关于如何使用它?我收到以下错误:方法 'System.Linq.Enumerable.Join(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable 的类型参数, System.Func, System.Func, System.Func)' 不能从用法中推断出来。尝试明确指定类型参数。
  • 这是方法语法。我认为它更容易阅读:msdn.microsoft.com/en-us/library/bb669071.aspx
【解决方案2】:

试试

var x = from contrato in ctx.Contratos 
        join pago in ctx.Pagos
        on contrato.ID equals pago.Contrato 
        where pago.pagado == true 
        group new {contrato, pago} by contrato.finca into g
        select new {
            key = g.Key, 
            sum = g.Sum(p => p.pago.Importe_subtotal)
        };

【讨论】:

  • 我收到以下错误:错误 1 ​​'System.Linq.IGrouping' 不包含 'Finca1' 的定义并且没有扩展方法 'Finca1' - g 显示智能中没有属性
  • 您的代码中有 Finca1,这就是我放置 Finca1 的原因,但我也看到您有 finca。我不知道你的模型类型,我只是根据我在你的代码中看到的。但是在您使用 into 语句的初始代码中。我还添加了 SUM 聚合,因为您在初始查询中拥有它。
  • 现在我得到了预期的错误标识符; “新”是一个关键字。 Finca1 由外键约束自动生成。 finca 是 finca 的 id 的名称
  • 我解决了这个问题,再试一次。唯一的问题是我不确定是 Finca1 还是 Finca,因为我在您的查询中看到您有 Finca,但在您的 LINQ 中您有 Finca1。
  • 仍然收到错误:需要标识符; “新”是一个关键字
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多