【问题标题】:Linq Groupby Not Grouping in c#Linq Groupby在c#中没有分组
【发布时间】:2020-09-22 06:40:31
【问题描述】:

下面我有一段代码,它根据客户输出约会列表,一些客户可以有多个约会,但最新的约会是需要为所述客户输出的约会

输出根本没有分组,出于某种原因,我不知道为什么不分组

foreach (ClientRecord client in clients)
                {
                    List<ReturnRecord> records = db.Appointments
                        .AsNoTracking()
                        .Include(rec => rec.Property)
                        .Include(rec => rec.Property.Address)
                        .Include(rec => rec.AppointmentType)
                        .ToList()
                        .Where(rec => rec.ClientID == client.ID)
                        .Select(rec => new ReturnRecord
                        {
                            ClientName = $"{client.FirstNames} {client.Surnames}",
                            PropertyAddress = $"{rec.Property.Address.FormattedAddress}",
                            AppStatus = $"{rec.AppointmentStatus.Name}",
                            StockStatus = $"{rec.Property.Stocks.FirstOrDefault().StockStatus.Name}",
                            LastUpdated = rec.LastUpdated
    
                        })
                        .ToList();
    
                    returnList.AddRange(records);
    
                }
                returnList.GroupBy(rec => rec.PropertyAddress);
    
                return Ok(returnList);

这是输出截屏的附件

【问题讨论】:

  • GroupBy 方法有返回值!它不是无效的。您需要捕获返回值。它不会简单地修改您调用该方法的源集合。 Here is the documentation 请阅读此内容。
  • GroupBy (因为基本上所有的 LINQ 方法都不是一个动作,而是函数返回的结果你正在丢弃(不使用)。

标签: c# entity-framework linq vue.js entity


【解决方案1】:

您需要将 GroupBy() 的结果分配给变量:

returnList = returnList.GroupBy(rec => rec.PropertyAddress).ToList();

【讨论】:

  • 如何回答无法编译的代码获得 3 个赞?请编辑您的帖子,并编写正确的返回类型。让你的代码至少可编译
  • 我投了反对票,因为这个答案部分错误并且无法编译
【解决方案2】:

确保实际使用 .GroupBy() 方法返回的新 IEnumerable。

如果您想返回一个列表,您需要使用一种解决方法:

  1. .GroupBy() 获取IEnumerable&lt;IGrouping&lt;int, ReturnRecord&gt;&gt;
  2. 使用.SelectMany() 选择所有元素并将它们保存到 IEnumerable 中
  3. 现在您可以使用.List() 将您的 IEnumerable 转换为列表

示例:

// Longer Alternative
IEnumerable<IGrouping<int, ReturnRecord>> groups = resultList
    .GroupBy((rec => rec.PropertyAddress);
IEnumerable<ReturnRecord> result = groups.SelectMany(group => group);
List<ReturnRecord> listResult = result.ToList();
return Ok(listResult);

// Shorter Alternative
IEnumerable<IGrouping<int, ReturnRecord>> groups = resultList
    .GroupBy((rec => rec.PropertyAddress);
IEnumerable<ReturnRecord> result = groups.SelectMany(group => group);
return Ok(result.ToList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多