2016-07-29 4 views
2

これをカウントする方法がありますか?LINQはグループとの結合を残して正しいカウントを返します

IList<DtoProfile> profileList = Session().QueryOver<DtoProfile>() 
IList<Headword> methodList = Session().QueryOver<Headword>() 
var hList = profileList.Select(x => x.HeadwordList).SelectMany(x => x).ToList(); 

profileListにはHeadwordListが含まれています。 ID = 1、テキスト=テキスト1(プロファイル1から)
Headword2:ID = 2、テキスト=テキスト2(プロファイル1から)
Headword1:ID = 1、テキスト今hListは

Headword1ような見出し語が含まれています=テキスト1( プロファイル2から)

methodListが

Headword1含ま:ID = 1、テキスト=テキスト1
Headword2:IをD = 2、テキスト=テキスト2
Headword2:ID = 3、テキスト=テキスト3

私は

キーのような辞書を作りたい:テキスト1、値:2
キー:テキスト2、値:1
キー:テキスト3、値:0

var joined = (from headword in methodList 
    join profile in hList on headword equals profile 
    group headword by headword.Text 
    into groupedProfile 
    select groupedProfile).ToDictionary(x => x.Key, x => x.Count()); 

それはない作品!私はちょうど

キーを持って:[テキスト1]、[値:2
キー:テキスト2、価値:私の辞書で1
。 は、今私は左にまで改善参加:

var joined = (from headword in methodList 
    join profile in hList on headword equals profile into ps 
    from profile in ps.DefaultIfEmpty() 
    group headword by headword.Text 
    into groupedProfile 
    select groupedProfile).ToDictionary(x => x.Key, x => x.Count(y => y != null)); 

が、y => Y = nullで正しく動作しません! 私が手:

キー:テキスト1、値:2
キー:テキスト2、値:1
キー:テキスト3、値:1(間違っている、0でなければなりません)

+0

これらのQueryOverメソッドは実際にリストを返していますか?代わりに 'IQueryable'として残しておけば、それを最適化することができます。 –

答えて

2

私は」あなたの問題を理解していれば本当にわかりませんが...

var joined = methodList 
    .ToDictionary(item => item.Text, item => hList.Count(h => h.Text == item.Text)) 
+0

はい、これは私が必要とするものです。ありがとう! – Xeddon

関連する問題