2015-07-09 1 views
0

Я заинтересован в фильтрации некоторых данных по нескольким различным критериям. Когда я извлекаю свой список из базы данных, в настоящее время у меня есть два предложения .Where, один .GroupBy и один .Take. Моя проблема в том, что я хочу взять 3 из каждой группы и добавить ее в свой список, что в конечном итоге не должно быть списком сгруппированных..GroupBy с .Take VB.Net

Вот код, который я работал с:

Dim dateRangeEnd As New Date(Property.Year, 10, 31) 
Dim configurableCount = 3 
Dim unfilteredList = _repository.GetIEnumerableFromDB(param1, param2) _ 
    .Where(Function(r) ({status1, status2, status3}) _ 
    .Any(Function(x) r.status.HasValue AndAlso x = r.status.Value)) _ 
    .Where(Function(r) r.StartDate.Value.Year = Property.Year AndAlso r.StartDate.Value < dateRangeEnd) _ 
    .GroupBy(Function(r) r.StartDate.Value.Month) _ 
    .Take(configurableCount) 

Как я могу изменить это так, чтобы я добавлять только configurableCount от каждого месяца в мой список?

ответ

3

Вы выравниваете последовательность последовательностей с помощью SelectMany.

.Where(Function(r) ({status1, status2, status3}) _ 
.Any(Function(x) r.status.HasValue AndAlso x = r.status.Value)) _ 
.Where(Function(r) r.StartDate.Value.Year = Property.Year AndAlso r.StartDate.Value < dateRangeEnd) _ 
.GroupBy(Function(r) r.StartDate.Value.Month) _ 
.SelectMany(Function(g) g.Take(configurableCount)) 
+0

И .SelectMany вытащит настраиваемое количество из каждой группы? Если я понимаю, что это происходит, потому что '(функция (g) g.Take (configurableCount))' выбирает из каждой группы? –

+0

'SelectMany' будет принимать все функции выбора. Функция выбора вызывается один раз для каждого элемента во внешней последовательности (которая является последовательностью групп), поэтому она называет «Take» в каждой группе отдельно. – GSerg