Без использования Dicionary
:
Если вам нужно отфильтровать все artist
, у которых нет disque
звонков LP
, измените немного свой код:
1 - изменить orderBy
и GroupBy
для возврата IEnumerable<IGrouping<>>
вместо IOrderedEnumerable<IGrouping<>>
var query = (from i in Globals.ds.Tables[0].AsEnumerable()
select new { art = i.Field<string>("artiste"), alb = i.Field<string>("album"), dis = i.Field<string>("disque") })
.Distinct()
.OrderBy(g => g.Key)
.GroupBy(g=> g.art);
2 - во втором запросе использовать функцию where
:
if (!LP.Checked)
{
query = query.Where(x => !x.Any(p => p.dis == "LP"));
}
Использование Dicionary
:
Если вы хотите фильтровать внутри сгруппированных значений, вы можете использовать Dictionary<>
вместо IEnumerable<IGrouping>
, возвращаемого функцией GroupBy
, например следующий код:
1 - в первом запросе используйте ToDictionary
для преобразования IEnumerable<IGrouping>
в Dictionary<>
var query = (from i in Globals.ds.Tables[0].AsEnumerable()
select new { art = i.Field<string>("artiste"), alb = i.Field<string>("album"), dis = i.Field<string>("disque") })
.Distinct()
.GroupBy(g=> g.art)
.OrderBy(g => g.Key)
.ToDictionary(x => x.Key, y => y.ToList());
2 - используйте простой Where
внутри ToDictionary
для фильтрации значений для каждой artist
группы, например, следующий код:
if (!LP.Checked)
{
query = query.ToDictionary(x => x.Key, y => y.Value.Where(p => p.dis != "LP").ToList());
}
Второй запрос отфильтрует внутренние значения.
Документация:
словарь
todictionary
Надеюсь, это поможет.