我有以下的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异常( “无法由型 '任务'。命令”)。

是否有任务必须实现一个接口(它的的实现了IComparable,IComparable的)?请问任务需要一个LINQ到SQL实体(它不是,目前,由于没有相应的表格)。还是这只是一些LINQ到SQL不支持?

请注意,我已经尝试过的匿名类型分组,它失败,类似的InvalidOperationException异常:

...
group revision by new { Code = revision.TaskSourceCode.ToUpper(),
                        Id = revision.TaskSourceID } 
...

有关它的价值,请注意,任务对象是2个字段的复合材料;一个是单个字符(通常的“S”或“B”),而另一个是一个int(实际上跨数据库“外键”如果你喜欢)。排序由任务的行为只是比较它们的字符串表现;例如。任务 'B101'<任务 'S999'

有帮助吗?

解决方案

看起来你已经有了解决方案,但只是FYI的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'

希望有所帮助。

其他提示

行,我这出。我有两个问题;首先,ToUpper的()并没有转化为SQL,其次,我不认为LINQ到SQL排序依据的对象支持;至少没有非实体。通过分解的OrderBy成它的组成列,一切开始按计划工作。

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);

我想你你的组之前,需要选择的 - 你想对象转换为任务,然后由其他的东西(Task.start或东西)为了

LINQ到SQL可能支持String.ToUpper(),但它不支持Char.ToUpper()这正是我需要为这个特定的表和列。但是,感谢您的信息呢!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top