database - 使用 LINQ to Entities 选择连续条目

标签 database linq linq-to-entities

我有一个数据库表,其中每行都包含一个顺序索引。我想根据这个索引列选择连续的行组。例如,如果我有具有以下索引值的行:

1
3
4
5
7
9
10
11
12
15
16

我想选择具有 3 个连续索引的所有组(这个数字会有所不同)。我会得到以下组:

3, 4, 5

9, 10, 11

10, 11, 12

基本上,我正在尝试实现与这里提出的问题类似的东西:

selecting consecutive numbers using SQL query

但是,我想用 LINQ to Entities 来实现它,而不是实际的 SQL。我也不想使用存储过程,我不想做任何类型的 ToList/循环方法。

编辑:具有超过请求的连续元素的组不一定需要分开。即在前面的示例中,结果 9、10、11、12 也是可以接受的。

最佳答案

所以我认为我已经提出了一个非常好的解决方案,该解决方案是根据 Brian 在我链接到的主题中的回答建模的。

var q = from a in query
        from b in query
        where a.Index < b.Index
        && b.Index < a.Index + 3
        group b by new { a.Index }
            into myGroup
            where myGroup.Count() + 1 == 3
            select myGroup.Key.Index;

将 3 更改为您想要的连续行数。这为您提供了每组连续行的第一个索引。应用于我提供的原始示例,您将得到:

3
9
10

关于database - 使用 LINQ to Entities 选择连续条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293856/

相关文章:

c# - LINQ 到实体 - 触发器和表默认值

c# - EF Code First DbContext 仅为集合的第一个元素返回封装的实体

python - 创建我的 Django 模型时得到 "parent_id may not be NULL"

mysql - 拆分 MySQL 数据库

java - 如何在 db4o 中正确索引 java.util.uuid?

c# - 查找数组或 XML 中值的频率 (C#)

Java:匹配字符串中的短语

sql-server - Dapper 是否在 Linq 操作之前从数据库请求一个完整的对象?

C# Linq GroupBy,获取每个组中的列列表

entity-framework - 如何在 Entity Framework 模型中编写递归查询代码?