gpt4 book ai didi

c# - 取 LINQ 中每个分组项目的 Top(X)

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:46 24 4
gpt4 key购买 nike

我正在尝试获取列中每个唯一项的 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."}

我是否需要学习使用创建条件或其他东西?

最佳答案

好吧,我得到了我需要生成的 SQL,这需要一些研究等等。我确信我最初的问题与 LINQ 和 NHibernate 有关,尽管 Robert 发布的最后一个查询在技术上是正确的解决方法。

由于 IQueryable 的性质,只有在必要时才会枚举,这将生成单个 SQL 脚本。 SQL 本身生成“Where Exists”子句。

public IQueryable<Inspections> 
GetLatestInspectionDatesForAllRestaurants(int numRecords)
{
var subQuery = _session.Query<Inspections>()
.OrderByDescending(x => x.InspectionDate);

var inspections = _session.Query<Inspections>()
.Where(x => subQuery.Where(y => y.InspectionDate ==
x.InspectionDate).Take(numRecords).Contains(x))
.OrderBy(x => x.WellDataId);
return inspections;
}

就是这样,希望它最终能帮助到其他人。

关于c# - 取 LINQ 中每个分组项目的 Top(X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com