次のLinq to SQLクエリがあり、複数列のGROUP BYを実行しようとしています:
return from revision in dataContext.Revisions
where revision.BranchID == sourceBranch.BranchID-1
&& !revision.HasBeenMerged
group revision by new Task(revision.TaskSourceCode.ToUpper(),
revision.TaskSourceID)
into grouping
orderby grouping.Key ascending
select (ITask)grouping.Key;
これにより、InvalidOperationException (「タイプ 'Task' で注文できません。」) がスローされます。
Task が実装する必要があるインターフェイスはありますか (既にIComparable、IComparable<ITask> を実装しています)。Task は Linq to SQL Entity である必要がありますか (対応するテーブルがないため、現在はそうではありません)。それとも、これは Linq to SQL がサポートしていないものですか?
グループ化のために匿名型を既に試しましたが、同様の InvalidOperationException で失敗したことに注意してください。
...
group revision by new { Code = revision.TaskSourceCode.ToUpper(),
Id = revision.TaskSourceID }
...
価値のあることとして、Task オブジェクトは 2 つのフィールドの複合体であることに注意してください。1 つは単一の文字 (通常は 'S' または 'B') で、もう 1 つは int (実際にはデータベース間の「外部キー」) です。タスクによる順序付けの行為は、それらの文字列表現を比較するだけです。EG タスク 'B101' < タスク 'S999'