【发布时间】:2021-06-01 15:40:39
【问题描述】:
我想检索最新订单和总金额的前 5 位商户。但是,我似乎无法获得总金额。我认为问题在于LastOrderGrandTotal= x.FirstOrDefault().GrandTotal。语法下面的代码是 LINQ 方法语法
var list = _ApplicationDbContext.OrderTransaction
.Where(x => x.Status != 0)
.GroupBy(x => x.MerchantUserId)
.Select(x => new DashboardActiveMerchantStore { MerchantUserId = x.Key, CreatedDate = x.Max(c => c.CreatedDate), LastOrderGrandTotal= x.FirstOrDefault().GrandTotal })
.OrderByDescending(x => x.CreatedDate)
.Take(5)
.ToList();
为了进一步说明上述查询的 SQL 语法是
select TOP(5) MerchantUserId,MAX(CreatedDate),GrandTotal from OrderTransaction
group by MerchantUserId
order by CreatedDate desc
我有一个类来存储从 LINQ 语法中检索的数据
public class DashboardActiveMerchantStore
{
public string MerchantName { get; set; }
public double LastOrderGrandTotal { get; set; }
public Guid MerchantUserId { get; set; }
public DateTime CreatedDate { get; set; }
}
【问题讨论】:
-
我不认为
x.FirstOrDefault()是同一个,因为您在调用它之后对列表进行排序。您最安全的选择是保留整个列表,排序,然后在排序后挑选它。 -
但我不认为我们可以在保留整个列表正确后对其进行排序。由于列表包含重复条目,我希望它按商家分组。我最初的计划是通过创建的数据按商家订单分组并获得总计,但我似乎无法访问总计
-
根据您的 SQL 查询,它应该是
LastOrderGrandTotal= x.GrandTotal。但我不确定您的 SQL 查询如何正常工作。因为您在MerchantUserId上有groupby。所以你只能在选择中拥有MerchantUserId和聚合函数,而没有其他列。请检查您的 SQL 查询是否运行成功。 @谭一静 -
那个 SQL 查询不可能工作;它会抛出
...is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
标签: c# mysql entity-framework linq