#linq
#linq
Вопрос:
У меня есть список, как показано ниже:
Health_Plan HealthMemberType_Name Health_Benefit_Description
Silver Parent a1
Silver Spouse b1
Silver Children c1
Silver Parent a2
Silver Spouse b2
Silver Children c2
Gold Parent a1
Gold Spouse b1
Gold Children c1
Gold Parent a2
Gold Spouse b2
Gold Children c2
Я ожидаю получить следующий результат (группировать по Health_Plan и HealthMemberType_Name)
Silver
Parent
a1
a2
Spouse
b1
b2
Children
c1
c2
Gold
Parent
a1
a2
Spouse
b1
b2
Children
c1
c2
попробованные коды ниже:
var _aBenefits = _lHealthBenefit.GroupBy(o1 => new { o1.Health_Plan_Pid, o1.Health_Plan }).Select(grp1 => new Health_Benefits_Consolidated
{
Health_Plan_Pid = grp1.Key.Health_Plan_Pid,
Health_Plan = grp1.Key.Health_Plan,
Health_Benefits = grp1.ToList()
}).ToList();
public class Health_Benefits
{
public long Health_Plan_Pid { get; set; }
public string Health_Plan { get; set; }
public string Health_Benefit_Description { get; set; }
public double Health_MaxLimit { get; set; }
public string HealthMemberType_Name { get; set; }
public string CCY { get; set; }
public int Max_Member { get; set; }
}
public class Health_Benefits_Consolidated
{
public long Health_Plan_Pid { get; set; }
public string Health_Plan { get; set; }
public int Max_Member { get; set; }
public List<Health_Benefits> Health_Benefits { get; set; }
}
похоже, мне нужно сгруппировать «HealthMemberType_Name» в список.. но я не знаю, как вставить group в «Health_Benefits = grp1.ToList()»
приветствуется любая помощь..
заранее большое спасибо
С уважением, Дон
Ответ №1:
Итак, вы хотите сгруппировать свои входные элементы в группы входных элементов, которые имеют одинаковые HealthPlan
.
Элементы каждой группы должны быть сгруппированы в подгруппы, где каждый элемент подгруппы имеет HealthMemberTypeName
.
Элементы каждой подгруппы являются HealthBenefitDescriptions
этого Group - SubGroup
Для этого мы используем GroupBy внутри другого GroupBy. Мы используем перечислимые.Перегрузка GroupBy, которая имеет resultSelector
var results = myInputSequence.GroupBy(
// parameter KeySelector: make groups of inputItems that have equal HealthPlan
inputItem => inputItem.HealthPlan,
// parameter resultSelector: take the common HealthPlan, and all input items
// that have this Healthplan to make a new object:
(healthPlan, inputItemsWithThisHealthPlan) => new
{
HealthPlan = healthPlan,
// Subgroups: take all input items with this healthplan, and group by
// HealthMemberTypeName
HealthMembers = inputItemsWithThisHealthPlan.GroupBy(
// keySelector:
inputItemWithThisHealthPlan => inputItemWithThisHealthPlan.HealthMemberTypeName,
// ResultSelector: take the common HealthMemberTypeName and all
// input items with this HealthPlan and this HealthMemberTypeName
// to make one new object
(healthMemberTypeName, inputItemsWithThisHealthMemberTypeName) => new
{
HealthMemberTypeName = healthMemberTypeName,
// keep only the HealthBenefitDescriptions:
HealthBenefitDescriptions = inputItemsWithThisHealthMemberTypeName
.Select(inputItemWithThisHealthMemberTypeName => inputItemsWithThisHealthMemberTypeName.HealthBenefitDescription)
.ToList(),
})
.ToList(),
});
Длинные имена идентификаторов могут затруднить чтение, но я подумал, что это поможет вам лучше понять, что в нем содержится, чем если бы я использовал x, y, z . Множественное число — это последовательности, единичные числа — элементы этих последовательностей
Комментарии:
1. Привет .. в моем случае я думал, что нужно только сгруппировать Health_Benefits = grp1. ToList() .. как сгруппировать его внутри следующего: var _aBenefits = _lHealthBenefit. GroupBy(o1 => new { o1.Health_Plan_Pid, o1.Health_Plan }). Выберите (grp1 => new Health_Benefits_Consolidated { Health_Plan_Pid = grp1.Key.Health_Plan_Pid, Health_Plan = grp1.Key.Health_Plan, Health_Benefits = grp1. ToList() }). ToList();