LINQ to EF を使用しており、次の LINQ クエリがあります。
var results = (from x in ctx.Items
group x by x.Year into decades
orderby decades.Count() descending
select new { Decade = decades.Key, DecadeCount = decades.Count() });
このように、年ごとにアイテムを分類し、その年のアイテム数を取得するという点で、私は自分がなりたい場所にたどり着きます。(つまり、2001 年 - 10 年、1975 年 - 15 年、2005 年 - 5 年、1976 年 - 1 年) 私が本当にやりたいことは、それらを 10 年ごとに分類することです (つまり、2000 年代 - 15 年、1970 年代 - 16 年)。
Linq ステートメントのグループ句の "by" 部分に "計算フィールド" を含めるにはどうすればよいですか。私が欲しいのは基本的に次のようなものだと思います:
var results = (from x in ctx.Items
group x by (x => x.Year.Value.ToString().Substring(0, 3) + "0s") into decades
orderby decades.Count() descending
select new { Decade = decades.Key, DecadeCount = decades.Count() });
または、より一般的には構文を使用して、より複雑な評価/計算を実行してグループ化を実行できるようにします。何か案は?
編集(更新):
(x => x.Year.Value.ToString().Substring(0, 3) + "0s") - 動作しません - "LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識しません。このメソッドはストア式に変換できません。」
(x.Year / 10 * 10) - 機能的に動作します (ありがとうございます) - 唯一の「問題」は、「s」が末尾にないことです (つまり、1970 対 1970 年代)
とにかくby句に関数を入れることはありますか? つまり、x を this.ManipulateYear(x.Year) で数十年にグループ化 ... または ... x => x.Year.Value.ToString().Substring(0,3) + "0s" ?? 考えられるあらゆるケースをカバーできるように、なんらかのテクニック (関数の呼び出しやラムダ式の使用など) があると便利です。
これについてのみんなの助けにもう一度感謝します。