2009-12-30 1 views
0

Как написать этот запрос в linq VB.NET?Linq to SQL с группой по

select top 15 count(1), A.Latitude, A.Longitude 
from Bairro A 
inner join Empresa B on B.BairroID = A.BairroID 
where A.CidadeID = 4810 
group by A.Latitude, A.Longitude 
order by COUNT(1) desc 

Я достиг этот код:

Dim TopBairros = (From A In Bairros _ 
        Join B In New BO.Empresa().Select On B.BairroID Equals A.BairroID Group A By A.Latitude, A.Longitude Into g = Group _ 
        Select g Distinct _ 
        Order By g.Count Descending).Take(15) 

Каждая строка имеет коллекцию массив, содержащий repeatly одни и те же объекты с номером счета. Пример:

строка 0: массив 874 же объектов строки 1: массив из 710 однотипных объектов

и так далее ... Как мне сделать, чтобы вернуть только один объект для каждой строки?

ответ

3

Попробуйте это:

var query = from a in context.Bairro 
      where a.CidadeID == 4810 
      join b in context.Empresa on a.BairroID equals b.BairroID 
      group a by new { a.Latitude, a.Longitude } into grouped 
      orderby grouped.Count() descending 
      select new { grouped.Key.Latitude, 
         grouped.Key.Longitude, 
         Count = grouped.Count() }; 
var top15 = query.Take(15); 
+0

Я использую VB.NET ... Я достиг этого кода: Dim TopBairros = (От А В Bairros _ Регистрация B В Нью-BO.Empresa(). Выберите On B.BairroID Equals A.BairroID Group A By A.Latitude, A.Longitude Into g = Group _ Выберите g Distinct _ Сортировать по g.Count Descending) .Take (15) Каждая строка имеет массивную коллекцию содержащие повторяющиеся объекты с номером счета. Пример: строка 0: массив из 874 одинаковых объектов строка 1: массив из 710 одинаковых объектов и т. Д. Как сделать, чтобы вернуть только один объект за строку? – Fernando

+0

@Fernando: Используя проекцию, у меня есть в конце - выберите ключ группы и счетчик. –