Linq 如何使用返回基元值(如整数)的 max 函数执行子查询

本文关键字:max 函数 查询 执行 返回 何使用 Linq 整数 | 更新日期: 2023-09-27 18:34:20

我有以下查询。

List<MyItem> myList
    = randomEntity
           .GroupBy(x => new {
                x.Id,
                x.randomInnerEntity.Name,
                x.randomInnerEntity.Number
           })
           .Select(z => new MyItem
           {
               Id = z.Key.Id,
               Name = z.Key.Name,
               Totals = z.Count(),
               LatestObj = randomEntity.Where(x => x.Id == z.Key.Id)
                                       .GroupBy(x => x.Id)
                                       .Select(gr => new {
                                            item1 = gr.Key,
                                            item2 = gr.Max(x => x.SomeInteger.Value)
                                       })
            })
            .OrderBy(z => z.Name)
            .ToList();

如您所见,内部子查询提供了 LatestObj 工作的动态对象,但它提供了一个匿名对象。 我想知道如何执行相同的查询但返回像整数这样的基元类型。

根据要求

public class MyItem
{
    property Guid? Id { get; set; }
    property String Name { get; set; }
    property Int MaxValueTryingToGet { get; set; } //This is the field I would like to set with the integer max
    property Int Totals { get; set; }
    property dynamic LatestObj { get; set; }
    property randInner randomInnerEntity { get; set; }
}

Linq 如何使用返回基元值(如整数)的 max 函数执行子查询

LatestObj = randomEntity.Where(x => x.Id == z.Key.Id)
                                   .GroupBy(x => x.Id)
                                   .Select(gr => new {
                                        item1 = gr.Key,
                                        item2 = gr.Max(x => x.SomeInteger.Value)
                                   })

由于您只是选择项目 id 与 z.Key.Id 匹配的项目,因此按 id 进行分组似乎没有太多点。

您应该能够直接通过使用获得最大值

LatestObj = randomEntity.Where(x => x.Id == z.Key.Id).Max(x -> x.SomeInteger.Value)