【问题标题】:Select Min() and other columns and GroupBy by two columns in EF 6在 EF 6 中按两列选择 Min() 和其他列和 GroupBy
【发布时间】:2021-11-17 08:34:03
【问题描述】:

使用下面的示例,(来自此链接here 中的答案)我如何选择/分组一个额外的列? 我搜索了这个网站和其他网站,并尝试了一些示例,但无法正常工作。

// Existing working code
    public class Rates
        {
            public string RateClass { get; set; }
            public decimal CostDay { get; set; }
            public decimal CostWeek { get; set; }
        }
     var rates = new List<Rates>
                {
                    new Rates {CostDay = 2, CostWeek = 7, RateClass = "Test 1"},
                    new Rates {CostDay = 4, CostWeek = 17, RateClass = "Test 1"},
                    new Rates {CostDay = 6, CostWeek = 27, RateClass = "Test 2"},
                    new Rates {CostDay = 8, CostWeek = 37, RateClass = "Test 2"}
                };
    
                var data = rates.GroupBy(t => t.RateClass)
                    .Select(g => new Rates {
                        RateClass = g.Key,
                        CostDay = g.Min(x => x.CostDay),
                        CostWeek = g.Sum(x => x.CostWeek)
                    })
                    .ToList();

// Need to add one extra column to be selected and grouped on
public class Rates
    {
        public string RateClass { get; set; }
        ****public string TypeOfVehicle { get; set; }****
        public decimal CostDay { get; set; }
        public decimal CostWeek { get; set; }
    }
 var rates = new List<Rates>
            {
                new Rates {CostDay = 2, CostWeek = 7, RateClass = "Test 1",TypeOfVehicle = "A"},
                new Rates {CostDay = 4, CostWeek = 17, RateClass = "Test 1",TypeOfVehicle = "B"},
                new Rates {CostDay = 6, CostWeek = 27, RateClass = "Test 2",TypeOfVehicle = "C"},
                new Rates {CostDay = 8, CostWeek = 37, RateClass = "Test 2",TypeOfVehicle = "D"}
            };

            var data = rates.GroupBy(t => t.RateClass)
                .Select(g => new Rates {
                    RateClass = g.Key,
                    ****TypeOfVehicle = ???**** 
                    CostDay = g.Min(x => x.CostDay),
                    CostWeek = g.Sum(x => x.CostWeek)
                })
                .ToList();

【问题讨论】:

    标签: sql entity-framework sql-server-2005


    【解决方案1】:

    听起来你想要的是:

    .GroupBy(g => new { g.RateClass, g.TypeOfVehicle })
    

    然后在.Select()

    .Select(g => new Rates 
    {
        RateClass = g.Key.RateClass,
        TypeOfVehicle = g.Key.TypeOfVehicle,
        CostDay = g.Min(x => x.CostDay),
        CostWeek = g.Sum(x => x.CostWeek)
    })
    

    这组根据费率等级和车辆类型的不同组合。

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多