2012-02-13 2 views
0

У меня есть проблема, чтобы перевести этот запрос в формате LINQ:Distinct в LINQ

select Version, count(distinct(idUser)) from HistoUsers 
group by Version 

То, что я до сих пор это:

public static List<VersionsUsed> GetNumberOfCompaniesUsingEachVersions2() 
{ 
    var foundUsers = (from hu in sdt.DataContext.HistoUsers 

         group hu by new { hu.Version, hu.IdUser } into g 
         select new VersionsUsed { nameVersion = g.Key.Version, NumberOfCompaniesUsingThisVersion = g.Count((g.Key.IdUser).distinct()) }); 

    return foundUsers.ToList(); 
} 

Кажется, у меня есть проблемы синтаксиса на различных() Может ли кто-нибудь помочь мне в этом? заранее спасибо

+0

проверить это http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx – AnarchistGeek

+0

и это похоже вопрос http://stackoverflow.com/questions/2786750/how-to-get-particular-column-distinct-in-linq-to-sql – AnarchistGeek

+0

Если вы говорите о версии SQL, он отлично работает с SQL-сервером, не проблема для этого для меня – Slrg

ответ

1
from hu in sdt.DataContext.HistoUsers 
group hu by new { hu.Version, hu.IdUser } into g 
select new VersionsUsed 
{ 
    nameVersion = g.Key.Version, 
    NumberOfCompaniesUsingThisVersion = g.Select(c=>c.IdUser).Distinct().Count() 
} 
+0

Большое спасибо за вашу помощь. Это выглядит правильно, но у меня слишком много результатов. например, если явный() не использовался ... я не понимаю почему ... – Slrg

1

Вы можете использовать Linqer для этого: он генерирует операторы LINQ из эквивалентных утверждений SQL. Вы можете скачать 10-дневную пробную версию от http://www.sqltolinq.com/downloads.

1

Может быть что-то вроде этого:

select new VersionsUsed 
     { 
      nameVersion = g.Key.Version, 
      NumberOfCompaniesUsingThisVersion = g.Select(a=>a.IdUser).Distinct().Count()) 
     }; 
+0

Большое спасибо за вашу помощь. Это выглядит правильно, но у меня слишком много результатов. как если бы явный() не использовался ... я не понимаю почему ... – Slrg

1

Вашего отчетливого заявление должно быть таким: Distinct(...)

1-й буква в верхнем

0

Вместо distinct использовать ключевое слово first. Она будет работать:

var foundUsers = (from hu in sdt.DataContext.HistoUsers 
    group hu by new { hu.Version, hu.IdUser } into g 
    select new VersionsUsed { nameVersion = g.Key.Version, NumberOfCompaniesUsingThisVersion = g.Count((g.Key.IdUser).First()) }); 
return foundUsers.ToList();