2011-08-02 14 views
0

Linqのクエリを構造化して、データベース内の最も人気のあるタグの一覧またはIenumerableを返します(私はEF4.1を使っています)。Linqを使用して最も人気のあるものを見つける

現在、私が持っている:

var tagsListing = db.Tags 
          .GroupBy(q => q.Name) 
           .OrderByDescending(gp => gp.Count()) 
           .Take(5) 
           .Select(); 

私はそこに道の一部だと思うが、私は、Selectステートメントを構築する方法がわからないよ...

答えて

1

はただ、あなたが名前と、カウントをしたいと仮定:

.Select(g => new { Name = g.Key, Count = g.Count() }); 

EDIT:あなたにも、完全なタグをしたい場合は、あなた使用することができます

与えるだろう
.Select(g => new { Tags = g, Count = g.Count() }) 

は、 グループのグループのタグがあります。グループ内ではすべて同じ名前です。または、各グループ内の最初のタグのみが必要な場合もあります。

.Select(g => g.First()) 

それは何で構成され、タグはっきりしない、または何正確あなたは結果にしたいです。

+0

を呼び出す必要はありません。 – Judo

+0

@Judo: '.Select(g => g.Key)'だけうまく動作します。 –

+0

Tagオブジェクト全体ではなく、文字列を選択するだけのようです。 IQueryable を返しています。理想的には、Ienumerable を返したいと思います。 – Judo

2

をごSelect呼び出しはこのようになります。 :あなたの最も人気のあるタグのIEnumerable<string>を与える

.Select(gp => gp.Key) 

Nameがであると仮定すると0)。

0

あなたは、おそらくこのような名前を選択します:

.Select(gp => gp.Key); 
1

あなたは完全に実行可能なクエリを書いていると私は匿名型が、実際のタグを返すようにしたいdidntはどうかの程度.Select

IQueryable<IGrouping<string, Tag>> tagsListing = db.Tags 
    .GroupBy(q => q.Name) 
    .OrderByDescending(gp => gp.Count()) 
    .Take(5); 

List<IGrouping<string, Tag>> results = tagListing.ToList(); 
関連する問題