2009-03-03 4 views
5

LINQクエリによってはまだパズルがあります。トップ、カウント、グループ、および命令を含むSQLをLINQ(2つのエンティティ)に変換する

テーブル 'ヒット'に 'ページ'と '日付'の2つの列が含まれている場合、定義されたスライスの中で最も多くの行を持つページを最も見つけたいと思います。

SQLでは、私はこの使用します。私は何のアイデアはどのように誰もがここで私を助けることができ、これにアプローチしないようになったLINQで

SELECT TOP 10 
     [Page] 
     ,COUNT([Page]) as Number 
FROM dbo.[Hits] 
WHERE [Date] >= CONVERT(datetime,'14 Jan 2009') 
AND [Date] < CONVERT(datetime,'15 Jan 2009') 
Group BY [Page] 
Order by Number DESC 

を?私はlinqerを使って変換しようとしましたが、この式のエラーが表示されます。

答えて

7

このような何かが動作するはずです:

(from p in DataContext.Hits 
where (p.Date >= minDate) && (p.Date < maxDate) 
group p by p.Page into g 
select new { Page = g.Key, Number = g.Count() }).OrderByDescending(x => x.Number).Take(10); 
+0

誤植のp < maxDate -> p.Dateで Sam

+0

ああ、そして、あなたのLINQのコードはC#で使用されている場合はもちろん、1がする必要があるでしょう'and'の代わりに '&&'を使用してください。それはVBでする必要がありますか? – Sam

7
var top10hits = objectContext.Hits 
    .Where(h => minDate <= h.Date && h.Date < maxDate) 
    .GroupBy(h => h.Page) 
    .Select(g => new { Page = g.Key, Number = g.Count() }) 
    .OrderByDescending(x => x.Number) 
    .Take(10); 
+0

Typo in .Select(g => Page = g.Key、Number = g.Count()}) - > .Select(g => new {Page = g.Key、Number = g.Count()} ) それ以外の場合は「同じですが違う」:) – veggerby

+0

タイプミスありがとうございました - veggerby;そして編集 - 正義。 –

+0

また - @ "同じ同じ...しかし異なる"私は拡張メソッドがクエリの理解の構文よりも発見可能であることがわかります。それが私が使用するものです。 –

関連する問題