Количество столбцов групповой колонки 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 для нескольких групп столбцов. Как это можно зафиксировать?
Ответы
Ответ 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; }
}