[c#]Linq 如何执行子查询返回原始值,例如整数的最大功能?

标签: Linq C#
发布时间: 2017/2/28 21:16:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下查询。:

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; }
}

解决方法 1:

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)
官方微信
官方QQ群
31647020