【发布时间】:2012-08-17 21:42:28
【问题描述】:
我有以下代码,它计算按车辆类型分组的车辆。
using (var uow = new UnitOfWork(new NHibernateHelper().SessionFactory)) {
var repo = new Repository<Vehicle>(uow.Session);
var vtSummary= repo.ListAll()
.GroupBy(v => v.VehicleType.Name)
.Select(v => new NameCount {
EntityDescription = v.First().VehicleType.Name,
QtyCount = v.Count() })
.OrderByDescending(v => v.QtyCount).ToList();
uow.Commit();
return vtSummary;
}
上面产生如下sql代码:
SELECT VehicleType.Name as col_0_0_,
CAST(COUNT(*) AS INT) as col_1_0_
FROM Vehicle vehicle0_
LEFT OUTER JOIN VehicleType vehicletype1_
ON vehicle0_.VehicleTypeId= VehicleType.Id
GROUP BY VehicleType.Name
ORDER BY CAST(COUNT(*) AS INT) DESC
SQL 代码在 MS SQL Server 下运行良好,但在 SQl CE 下测试会产生以下错误:
System.Data.SqlServerCe.SqlCeException : Expressions in the ORDER BY list cannot contain aggregate functions.
Sub query in Sql server CE 的解决方案是为列指定别名并在 order by 子句中使用别名。
有没有什么方法可以在我使用的 LINQ 表达式中提供别名以使其运行而不会引发错误?
【问题讨论】:
标签: sql-server linq nhibernate