C# Linq to SQL:如何按复合对象排序?
我有以下Linq to SQL查询,其中我尝试通过以下方式进行多列分组:C# Linq to SQL:如何按复合对象排序?,c#,linq-to-sql,sql-order-by,C#,Linq To Sql,Sql Order By,我有以下Linq to SQL查询,其中我尝试通过以下方式进行多列分组: return from revision in dataContext.Revisions where revision.BranchID == sourceBranch.BranchID-1 && !revision.HasBeenMerged group revision by new Task(revision.TaskSourceCode.
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(“无法按类型“任务”排序”)
有任务必须实现的接口吗(它已经实现了IComparable,IComparable)?任务是否需要是LINQtoSQL实体(目前不是,因为没有对应的表)。或者这只是LINQtoSQL不支持的东西
请注意,我已经为分组尝试了匿名类型,但失败了,出现了类似的InvalidOperationException:
...
group revision by new { Code = revision.TaskSourceCode.ToUpper(),
Id = revision.TaskSourceID }
...
值得注意的是,任务对象是由2个字段组成的;一个是单个字符(通常是“S”或“B”),另一个是int(如果愿意,实际上是跨数据库的“外键”)。按任务排序的行为只是比较它们的字符串表示形式;例如,任务“B101”
return from revision in dataContext.Revisions
where revision.BranchID == sourceBranch.BranchID-1
&& !revision.HasBeenMerged
group revision by new { revision.TaskSourceCode,
revision.TaskSourceID }
into grouping
orderby grouping.Key.TaskSourceCode,
grouping.Key.TaskSourceID ascending
select (ITask)new Task(grouping.Key.TaskSourceCode,
grouping.Key.TaskSourceID);
看起来您已经有了解决方案,但仅供参考,LINQ to SQL确实支持
.ToUpper()
例如:
NorthwindDataContext dc = new NorthwindDataContext();
Product product = dc.Products.Single(p => p.ProductName.ToUpper() == "CHAI");
翻译成:
exec sp_executesql N'SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM [dbo].[Products] AS [t0]
WHERE <b>UPPER([t0].[ProductName]) = @p0</b>',N'@p0 nvarchar(4)',@p0=N'CHAI'
exec sp_executesql N'SELECT[t0].[ProductID],[t0].[ProductID],[t0].[SupplierID],[t0].[CategoryID],[t0].[QuantityPerUnit],[t0].[UnitsInStock],[t0].[UnitsOnOrder],[t0].[ReorderLevel],[t0].[t0].[中断]
来自[dbo]。[Products]作为[t0]
其中UPPER([t0].[ProductName])=@p0',N'@p0 nvarchar(4)',@p0=N'CHAI'
希望对您有所帮助。Linq to SQL可能支持String.ToUpper(),但它不支持Char.ToUpper(),这正是我在这个特定表和列中需要的。不过还是要谢谢你的信息 你能用代码/伪代码解释一下你的建议吗?我只是不明白你的意思。。。