【问题标题】:SQL query with Group By and Having Clause in LINQ structure在 LINQ 结构中使用 Group By 和 Have 子句的 SQL 查询
【发布时间】:2021-08-26 09:50:38
【问题描述】:

如何在 LINQ (c# EF6) 中编写此查询?

有人可以在这里帮助我吗 - 我是实体框架结构的新手 - 我很难使用不同的子句

SELECT 
    sum(remainingamount) TotalSiteCreditAmount,
    max(expirationutcdatetime) MaxExpiryDate
FROM 
    WholesaleCredits
WHERE 
    ExpirationUTCDateTime > Getdate()
GROUP BY 
    registeredcustomerid,
    siteid
HAVING 
    registeredcustomerid = :registeredCustomerId
    AND siteid = :siteId

目前已尝试以下方法:

var data =  context.WholesaleCredit
                .Where(x => x.ExpirationUTCDateTime > DateTime.Now)
                .GroupBy (x => x.RegisteredCustomerId)

代码中使用的实体:

 public partial class WholesaleCredits
    {
        public virtual int Id { get; set; }
        public virtual decimal CreditAmount { get; set; }
        public virtual decimal RemainingAmount { get; set; }
        public virtual Site Site { get; set; }
        public virtual DateTime GeneratedUTCDateTime { get; set; }
        public virtual DateTime ExpirationUTCDateTime { get; set; }
        public virtual int RegisteredCustomerId { get; set; }
    }

【问题讨论】:

  • 您尝试过开始了吗?我们不知道您的实体是什么样的。
  • @DavidG - 尝试了以下几件事

标签: linq count entity-framework-6 having


【解决方案1】:

你不需要在这里 HAVING 并且分组应该由常量提供,因为你对分组键有过滤器:

var data = context.WholesaleCredit
    .Where(x => x.ExpirationUTCDateTime > DateTime.Now && x.RegisteredCustomerId == registeredCustomerId && x.Site.Id == siteid)
    .GroupBy(x => 1)
    .Select(g => new 
    {
        TotalSiteCreditAmount = g.Sum(x => x.RemainingAmount),
        MaxExpiryDate = g.Max(x => x.ExpirationUTCDateTime)
    })
    .First();

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 2021-10-21
    • 2015-02-28
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多