我有以下 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 必须实现的接口(它已经实现了 IComparable、IComparable<ITask>)?Task 是否需要是 Linq to SQL 实体(目前不需要,因为没有对应的表)。或者这只是 Linq to SQL 不支持的东西?
请注意,我已经为分组尝试了匿名类型,但失败并出现类似的 InvalidOperationException:
...
group revision by new { Code = revision.TaskSourceCode.ToUpper(),
Id = revision.TaskSourceID }
...
值得一提的是,Task 对象是 2 个字段的组合;一个是单个字符(通常是“S”或“B”),另一个是 int(如果您愿意,实际上是跨数据库的“外键”)。Tasks 的排序行为只是比较它们的字符串表示;EG 任务“B101”< 任务“S999”