車両タイプ別にグループ化された車両をカウントする次のコードがあります。
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.
Sql サーバー CE のサブ クエリからの解決策は、列のエイリアスを指定し、order by 句でエイリアスを使用することです。
エラーを発生させずに実行できるようにするために使用している LINQ 式にエイリアスを提供する方法はありますか?