2012-01-17 11 views
2

タイプの数をカウントするLINQクエリを作成しようとしています。LINQカウント数

このような何か:

var qry = from c in db.XBLRegionalContents 
    where c.PublishDate <= DateTime.Today 
    group c by c.ContentId into grouped 
    select new FeaturedViewModel { XBLRegionalContent = db.XBLRegionalContents.Find(grouped.Key), RegionCount = grouped.Count() }; 

しかし、何かが右ではありません。私は、XBLRegionalContentsオブジェクトを、そのオブジェクトがデータベース上にいくつの領域を持つかを示したいとします。

誰か助けてもらえますか?

ありがとうございました。ここで

UPDATE

は、私はあなたの問題はあなたのFind文であると思いXBLRegionalContent

public class XBLRegionalContent 
{ 
    [Key, Column(Order = 0)] 
    public string ContentId { get; set; } 
    [ForeignKey("ContentId")] 
    public virtual XBLContent Content { get; set; } 

    [Key, Column(Order = 1)] 
    public string RegionId { get; set; } 
    [ForeignKey("RegionId")] 
    public virtual XBLRegion Region { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 
} 
+0

代わりに何を得ていますか? –

+0

各地域のコンテンツはcount = 1で示されています。私はすべての地域を同じContentIdでグループ化し、オブジェクト自体を表示しながら数えようとしています。 – programad

+0

'db.XBLRegionalContents.Find(grouped.Key)'をスキップしてキーだけを返すと、同じカウントが得られますか? (そうすべきです)その場合、データを確認する必要があります。 – Magnus

答えて

0

私はそれをしました!

var qry = from c in db.XBLRegionalContents 
    where c.PublishDate <= DateTime.Today 
    group c by c.ContentId into grouped 
    select new FeaturedViewModel { 
     XBLRegionalContent = grouped.FirstOrDefault(x => x.ContentId == grouped.Key), 
     RegionCount = grouped.Count() 
    }; 

みんなありがとう助けのため:

これがソリューションです!

0

ためのコードです。 Find()は、trueまたはfalseを返す述部を取る必要があります。文字列を渡すだけなので、コレクションの各アイテムをループしていると思います。

私はあなたのサンプルコードでいくつかの自由をとり、LinqPadで小さな例をまとめてFindを使って説明します。 0のコンテンツIDを取得する必要があります。

(Dump()メソッドはLinqPad固有のもので、オブジェクトやコレクションのすべてのプロパティを出力します) )

void Main() 
{ 
    var XBLRegionalContents = new List<XBLRegionalContent>(){ 
     new XBLRegionalContent { contentID = "a", ID = "aa" }, 
     new XBLRegionalContent { contentID = "b", ID = "bb" }, 
     new XBLRegionalContent { contentID = "a", ID = "cc" }, 
     new XBLRegionalContent { contentID = "d", ID = "dd" } 
    }; 

    XBLRegionalContents.Dump(); 

    var qry = from c in XBLRegionalContents 
     group c by c.contentID into grouped 
     select new { xbl = XBLRegionalContents.Find(x => x.contentID == grouped.Key), regionCount = grouped.Count() }; 

    qry.Dump(); 
} 

// Define other methods and classes here 
public class XBLRegionalContent{ 
    public string contentID {get;set;} 
    public string ID {get;set;} 
} 

これが役に立ちます。他の質問がある場合は教えてください。がんばろう!

+0

は機能しません。 Anywah、助けてくれてありがとう。 – programad

+0

申し訳ありません、それは助けになりませんでした。私はあなたがEFを使用していたことに気付かなかった。 XBLRegionalContentの主キーは何ですか? –

+0

"ContentId"と "RegionId"の複数のPKです。 – programad