2014-10-08 3 views
0

Допустим, у меня есть следующий запрос:Фильтр запроса с помощью метода расширения в группе по контексту

From row In DataSet.A 
Where row.Position <> 5 
Group row By row.Name Into eGroup = Group 
Select New With { 
    .Name = Name, 
    .Amount = eGroup.Count(Function(x) x.Money) 
} 

Объект DataSet имеет поле (дата). Из-за группировки поле больше не существует после группировки. Поэтому, если я хочу фильтровать по дате, я должен сделать это, прежде чем группировать.

У меня есть список, который выглядит как:

Dim j as New List(of Integer) 
j.Add(1) 
j.Add(2) 

Теперь я хочу, чтобы фильтровать по месяцам. Я знаю, что я могу использовать

.Where(Function(el) ls.Contains(datepart(month,el.date))) 

Но если установить это за Where row.Position <> 5 запрос не работает больше, так как она, как сломаны и не может подключиться к коду послесловие.

Кто-нибудь может сказать мне, как установить фильтр?

+0

Как C# включает в себя? –

+0

Как в стороне, вы уверены, что правильно «подсчитывать» деньги за каждую групповую инстанцию ​​«Сумма»? –

+0

Привет, Тим, да, все в порядке, исходный запрос немного длиннее и может быть немного запутанным, поэтому я использовал более короткую версию. Алекс: Это не имеет значения, если решение находится в C# или vb. Многие программисты могут программировать оба (.NET). Я мог бы переписать решение C#. Поэтому мне не важно, есть ли решение в C# или vb, вот почему. – ruedi

ответ

0

Почему вы не можете сделать:

Dim months = {1, 2} 
Dim query = From row In DataSet.A 
      Where row.Position <> 5 AndAlso months.Contains(row.Date.Month) 
      Group row By name Into eGroup = Group 
      Select New With { 
       Key .Name = name, 
       .Amount = eGroup.Count(Function(row) row.Field(Of Decimal)("Money")) 
      } 
+0

Не получилось, так как я думал, что Содержит недоступен в методе запроса. Знаю, я знаю это лучше. Спасибо за вашу помощь! – ruedi

Смежные вопросы