1

IEnumerable Collection をクエリするコントローラーに次の LINQ クエリがあります。ビューに結果を出力するとグループ化が機能しますが、グループ化した列にカウントを追加しようとすると、惨めに失敗します。以前の例を見てきましたが、明らかな何かが欠けています。

Grouped //正常に動作し、グループ化された説明を返します

itemdetails = (from c in db.CLIENTDETAILS
                           join l in db.LOCATIONS on c.CLIENTNUMBER equals l.CLIENTNUMBER
                           where c.CLIENTNUMBER == clientNumber
                           join i in db.ITEMDETAILS on l.LOCNUMBER equals i.LOCNUMBER
                           where i.LOCNUMBER == l.LOCNUMBER
                           select i).GroupBy(it => it.DESC).Select(grp => grp.FirstOrDefault()).OrderBy(x => x.DESC)

LINQ で Group と Count を取得しようとしたこと //動作せず、エラーを返す

itemdetails = (from c in db.CLIENTDETAILS
                           join l in db.LOCATIONS on c.CLIENTNUMBER equals l.CLIENTNUMBER
                           where c.CLIENTNUMBER == clientNumber
                           join i in db.ITEMDETAILS on l.LOCNUMBER equals i.LOCNUMBER
                           where i.LOCNUMBER == l.LOCNUMBER
                           select i).GroupBy(it => it.DESC).Select(grp => new {DESC = grp.key, Count = grp.COUNT()}).OrderBy(x => x.DESC)

これにより、次のエラーが発生します:-型システムlinq iorderedqueryableをsystem.collections.generic.ienumerableに暗黙的に変換できません

いつもお世話になっております。

4

1 に答える 1

2

2 つのクエリは異なるデータを返します。最初のクエリは typeItemDetailの項目を返し、2 番目のクエリは匿名型の項目を返します。

匿名型の IEnumerable が必要な場合は、varキーワードを使用して宣言する必要があります。

var itemdetails = (from c in db.CLIENTDETAILS
                           join l in db.LOCATIONS on c.CLIENTNUMBER equals l.CLIENTNUMBER
                           where c.CLIENTNUMBER == clientNumber
                           join i in db.ITEMDETAILS on l.LOCNUMBER equals i.LOCNUMBER
                           where i.LOCNUMBER == l.LOCNUMBER
                           select i).GroupBy(it => it.DESC).Select(grp => new {DESC = grp.key, Count = grp.COUNT()}).OrderBy(x => x.DESC)
于 2013-06-26T11:34:35.490 に答える