Количество столбцов групповой колонки Linq - программирование
Подтвердить что ты не робот

Количество столбцов групповой колонки Linq

У меня есть

Список, MyList, объектов с полями:

string A;
string B;

Концептуально это похоже на таблицу SQL с двумя столбцами со столбцами A, B.

Я пытаюсь создать выражение linq, которое создало бы три набора результатов из этого T-SQL в такой концептуальной таблице:

SELECT A, B, COUNT(B) 
FROM T1
GROUP BY A, B

То есть, если бы у меня была таблица, например:

A       B
----------
x       g
x       g
x       g
x       s
y       g
y       g

Я бы ожидал:

A       B       COUNT(B)
-------------------------
x       g         3
x       s         1
y       g         2

Мои лучшие усилия были следующие:

var result = from MyObjs in MyList
group MyObjs by new { MyObjs.A, MyObjs.B } into g
select new { g.Key.A, g.Key.B, g.Key.B.Count() }

Но число count, как представляется, возвращает общее число B, а не число B для нескольких групп столбцов. Как это можно зафиксировать?

4b9b3361

Ответ 1

Попробуй это.... (с моей головы)

var result = from MyObjs in MyList
group MyObjs by new { MyObjs.A, MyObjs.B } into g
select new { g.Key.A, g.Key.B, MyCount = g.Count() }

Или, если вы предпочитаете...

var result = MyList.GroupBy(x => new {x.A, x.B})
                   .Select(g => new {g.Key.A, g.Key.B, MyCount = g.Count()});

Ответ 2

Я сталкиваюсь с подобным:

У меня есть следующий список:

===

План BenefitType Benefit

Silver A Benefit_1a
Серебро A Benefit_2a
Silver A Benefit_3a
Silver B Benefit_1b
Silver B Benefit_2b
Silver B Benefit_3b
Gold A Benefit_1a
Преимущество Gold A_2a Преимущество Gold A_3a Преимущество Gold B_1b Преимущество Gold B_2b Преимущество Gold B_3b

===

Я ожидаю этого результата: (Plan, BenefitType, Benefit)

Silver A Benefit_1a
Benefit_2a
Benefit_3a

B Benefit_1b
Benefit_2b
Benefit_3b

Золото

Benefit_1a
Benefit_2a
Benefit_3a

Золото
В
Benefit_1b
Benefit_2b
Benefit_3b

Я попробовал коды ниже, но он не возвращается, как ожидалось

    var _aBenefits = _lHealthBenefit.GroupBy(o1 => new { o.Plan, o.Benefit_Type }).Select(grp1 => new Benefits_Consolidated
                                            {
                                                Plan = grp.Key.Plan,
                                                Benefit_Type = grp.Key.Benefit_Type
                                                Benefit = grp.ToList()
                                            }).ToList();

     public class Benefit
    {
        public string Health_Plan { get; set; }
        public string MemberType { get; set; }
        public string Benefit_Type {get;set; }
        public string Benefit { get; set; }
    }

    public class MemberType_Consolidated
    {
        public string Plan { get; set; }
        public Health_MemberType { get; set; }
        public List<Benefit> Benefit { get; set; }
    }