我正在尝试为列中的每个唯一项目获取 Top(X) 记录。
例子:
Inspections
InspectionId | RestaurauntName | InspectionDate
------------------------------------------------
1 Mom&Pop 10/10/12
2 SandwichesPlace 10/10/12
3 Mom&Pop 10/10/11
4 SandwichesPlace 10/10/11
5 Mom&Pop 10/10/10
6 SandwichesPlace 10/10/10
7 BurgerPlace 10/10/11
8 BurgerPlace 10/10/09
9 BurgerPlace 10/10/08
如果我将“2”的值作为参数传递,我希望返回记录 1、2、3、4、7、8。
在这个示例片段中,我试图为每个“restaurantName”获取一些记录。
public IQueryable<Inspections>
GetLatestInspectionDatesForAllRestaurants(int numRecords) {
IQueryable<Inspections> inspections= _session.Query<Inspections>()
.GroupBy(r=> r.RestaurauntName)
.SelectMany(g => g
.OrderBy(r => r.InspectionDate)
.Take(numRecords));
return inspections;
}
不幸的是,我收到了这个错误。
Query Source could not be identified:
ItemName = g, ItemType = System.Linq.IGrouping`2
代码中此时触发异常
var inspections = _inspectionRepository.GetLatestInspectionDatesForAllRestaurants(2).ToList();
我错过了什么?
编辑
运行测试后,我确认查询在 LINQ-To-Objects 中运行良好。是否有可能 NHibernate.Linq 在这方面仍然不完整?我做了一个稍微不同的查询(如下)并得到了一个未实现的异常。
.GroupBy(r=> r.RestaurauntName)
.Select(g => g.First()).Take(5)
如果我从最后删除 Take(5),我会得到以下信息(提醒这是一个示例,我的 PK 在我的真实案例中是 Id)。
{"Column '.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."}
我需要学习使用创建标准吗?