2011-01-24 12 views
2

以下は、次のエラーをスローするLINQステートメントの抜粋です。私は以下のようにID(ID = af.AgileFactorID)を参照する方法はありますか?.... psf.AgileFactorID == tagSummary.ID?あなたの助けを前もってありがとう!C#LINQエラーのヘルプ

select new { 
    ID = af.AgileFactorID, 
    Total = psf.Count() 
}; 

1)名AF 2)名前PSFが存在しない現在のコンテキストで

var tagCloud = from psf in tagSummary where psf.AgileFactorID == tagSummary.ID 

1)エラー62 'AnonymousType#1' がない、現在のコンテキストに存在しません'AgileFactorID'の定義を含み、 'AnonymousType#1'タイプの最初の引数を受け入れる拡張メソッド 'AgileFactorID'がありません。(使用するディレクティブまたはアセンブリ参照がありませんか?)

2)エラー63 ' System.Collections.Generic.IEnumerable 'に' ID 'の定義が含まれていませんそして何の拡張メソッド「ID」型「System.Collections.Generic.IEnumerable」の最初の引数を受け入れるが見つかりませんでした(あなたがusingディレクティブまたはアセンブリ参照が不足している?)ここで

がいっぱいクエリです:

private void BindTagCloud() 
{ 



var tagSummary = from af in db.AgileFactors 
      join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID 
      join s in db.Stories on psf.StoryID equals psf.StoryID 
      join pim in db.ProjectIterationMembers on pim.ProjectIterationMemberID equals s.ProjectIterationMemberID 
      join i db.Iteration on ... 
      join p db.Project on .... 
      where p.ProjectID == proj_id && 
       p.ProjectID == i.ProjectID && 
       i.ProjectIterationID == pim.ProjectIterationID && 
       pim.ProjectIterationMemberID == s.ProjectIterationMemberID && 
       s.StoryID == psf.StoryID && 
       psf.AgileFactorID == af.AgileFactorID 
       group af by af.Name into tagGroup 

       select new 
       { 

        ID = af.AgileFactorID, 
        Total = psf.Count() 

       }; 


var tagCloud = from psf in tagSummary 
     where psf.AgileFactorID == tagSummary.ID 
select new 
{ 

Name = psf.Name, 
ID = psf.AgileFactionID, 
Count = psf.Count(), 

weight = Count/tagSummary.Total * 100 

}; 


ListView1.DataSource = tagCloud; 
ListView1.DataBind(); 

} 
+1

クエリ全体を見ることができれば助かります。 –

+0

あなたが投稿したコードから何が間違っているのかを推測する方法はありません。もっとコンテキストを与える必要があります。 –

+0

もっと見る必要があると思います。 'af'のタイプは何ですか?それはどんなものでも見えますが、 'AgileFactorID'は定義されていません。 –

答えて

1

「フルクエリ」は、構文エラーや不足している部分が多数あるため、正確ではありません。

それでも、私はそれを再構築することができる最善のはこれです:あなたのために、このクエリはどのように機能するの

var tagSummary = 
    from af in db.AgileFactors 
    join psf in db.ProjectStoryFactors 
     on af.AgileFactorID equals psf.AgileFactorID 
    join s in db.Stories on psf.StoryID equals s.StoryID 
    join pim in db.ProjectIterationMembers 
     on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID 
    join i in db.Iteration 
     on pim.ProjectIterationID equals i.ProjectIterationID 
    join p in db.Project on i.ProjectID equals p.ProjectID 
    where p.ProjectID == proj_id 
    group af by new { af.Name, af.AgileFactorID } into tagGroup 
    select new 
    { 
     ID = tagGroup.Key.AgileFactorID, 
     Name = tagGroup.Key.Name, 
     Count = tagGroup.Count() 
    }; 


var tagCloud = 
    from t in tagSummary 
    join psf in db.ProjectStoryFactors 
     on t.ID equals psf.AgileFactorID into psfs 
    let Count = psfs.Count() 
    let Total = tagSummary.Count() 
    select new 
    { 
     t.Name, 
     t.ID, 
     Count, 
     Weight = (double)Count/Total * 100, 
    }; 

?それは近いですか?

0

@MiziaQ、

私は、誰が、どこから始めれば任意のアイデアを持っていないので、答えの欠如があり得ることを疑うでしょう。これで間違ったことがたくさんあるように見え、どこから始めるのかほとんど分かりません。私はまたあなたが達成しようとしていることを全く知らない。グループ機能は、これはもはや利用可能であることを意味しないしかしあなたはセクション

group af by af.Name into tagGroup 

を持っていなかった場合、あなたのクエリにaf.AgileFactorIDを参照する

しかし、いくつかの明らかなエラー

あなたの試みが働くだろう。あなたがAgileFactorIDにアクセスする必要がある場合、あなたは、これはあなたが、だけで同様

select new { AgileFactorID = tagGroup.Key.AgileFactorID} 

のようにそれを参照することによりAgileFactorIDの値にアクセスできるようにする必要があります

group af by new { af.Name, af.AgileFactorID} into tagGroup 

を経由してグループ化して、それを含める必要がありますグループ分けのために、psfはもはや有効範囲にありません。 (これはpsf.Count()が意味を成さないという事実も無視している)。

最後のクエリも混乱します。最初のクエリのselectは、(もしうまくいけば)IDとTotalという2つのフィールドを返すクエリを提供すべきであることを示します。 AgileFactorIDまたはNameという名前は返されません。

私はあなたがLINQを学んでいることを前提としていますので、thisの質問に役立つリソースがいくつか見つかります。