C# 使用LINQ to实体选择连续字符串项
起初你们可能会认为这是问题的重复,但希望你们会看到它不是C# 使用LINQ to实体选择连续字符串项,c#,linq,entity-framework,C#,Linq,Entity Framework,起初你们可能会认为这是问题的重复,但希望你们会看到它不是 我还想选择连续的行组,但是考虑到这个条目是电话号码,因此,作为字符串存储。 我一直在尝试这样的想法: var numbers = await (from a in context.Telephones from b in context.Telephones Convert.ToInt32(a.Number) < Convert.ToInt32(b.
我还想选择连续的行组,但是考虑到这个条目是电话号码,因此,作为字符串存储。
我一直在尝试这样的想法:var numbers = await (from a in context.Telephones
from b in context.Telephones
Convert.ToInt32(a.Number) < Convert.ToInt32(b.Number) &&
Convert.ToInt32(b.Number) < (Convert.ToInt32(a.Number) + numberQuantity)
group b by new { a.Number }
into myGroup
where myGroup.Count() + 1 == numberQuantity
select myGroup.Key.Number).ToListAsync();
如何根据字符串值选择连续行?当查询3个连续数字时,会得到如下结果:
从2063717608到2063717610
从2063717609到2063717611
1-如果您知道调用一个numerable cast的性能副作用,请在内存中对检索到的实体执行查询和转换 2-如果您不想要解决方案1,您必须寻找解决转换问题的方法: 2-1-将数据库中的列类型更改为int 2-2-或选择其他开发人员先前提出的解决方案之一,例如:
1-如果您知道调用一个numerable cast的性能副作用,请在内存中对检索到的实体执行查询和转换 2-如果您不想要解决方案1,您必须寻找解决转换问题的方法: 2-1-将数据库中的列类型更改为int 2-2-或选择其他开发人员先前提出的解决方案之一,例如:
您是否尝试过先从上下文中提取所需的数据范围,使用ToList,然后对列表对象执行分组操作?如果您首先强制ToList将其拉出,您应该超出Linq对实体的限制,并且您将明确使用System.Linq作为您的表达式,这在允许您执行的操作上有一个更广泛的网络。我将尽力做到这一点,您将获得成功。让我知道,我会加上它作为回答我可以随时使用声誉。@SlackShot如果你努力的话,你只需要1个月就可以获得15K的声誉,但当然必须努力:@douglaslps你说要查询3个连续的数字,但我可以看到这里有4个数字:2063717608-2063717609-2063717610-2063717611,那么,哪一个是连续的3个呢?您是否尝试过先从上下文中提取所需的数据范围,使用ToList,然后对List对象进行分组?如果您首先强制ToList将其拉出,您应该超出Linq对实体的限制,并且您将明确使用System.Linq作为您的表达式,这在允许您执行的操作上有一个更广泛的网络。我将尽力做到这一点,您将获得成功。让我知道,我会加上它作为回答我可以随时使用声誉。@SlackShot如果你努力的话,你只需要1个月就可以获得15K的声誉,但当然必须努力:@douglaslps你说要查询3个连续的数字,但我可以看到这里有4个数字:2063717608-2063717609-2063717610-2063717611,那么哪一个是连续的3个呢?我会避免1,因为你提到的性能问题。选项2.1是不可能的,我认为2.2列出了将int转换为string的解决方案,而我需要将string转换为int,在您提到的链接上找不到类似的方法。不管怎样,谢谢你的帮助。我说的2-2是指你应该搜索,没有直接的解决办法。据我所知,到目前为止,唯一的方法是生成一个Sql函数并在Linq查询中调用它。@Alireza,SQLFunctions不会工作,但我认为应该接受你的答案。你说了他唯一的选择。通过ToList在内存中处理,或更改类型。我的问题是,更多关于他为什么这么做。。这是否用于报告目的?如果是报告,为什么不通过Telerik或其他报告工具使用纯SQL?@SlackShot SqlFunctions在C中没有任何帮助,但在DB中定义一个函数将nvarchar转换为int并在Linq查询中调用它肯定有效。关于你可以在问题下面评论的目的,我相信Alireza是对的。无论如何,我接受了一个懒散的建议,在linq查询返回该列表后,我正在解析该列表。由于您提到的性能问题,我将避免使用1。选项2.1是不可能的,我认为2.2列出了将int转换为string的解决方案,而我需要将string转换为int,在您提到的链接上找不到类似的方法。不管怎样,谢谢你的帮助。我说的2-2是指你应该搜索,没有直接的解决办法。据我所知,到目前为止,唯一的方法是生成一个Sql函数并在Linq查询中调用它。@Alireza,SQLFunctions不会工作,但我认为应该接受你的答案。你说了他唯一的选择。通过ToList在内存中处理,或更改类型。我的问题是,更多关于他为什么这么做。。这是否用于报告目的?如果是报告,为什么不通过Telerik或其他报告工具使用纯SQL?@SlackShot SqlFunctions在C中除了d之外没有任何帮助
在DB中定义一个函数,将nvarchar转换为int,并在Linq查询中调用它,这肯定是可行的。关于你可以在问题下面评论的目的,我相信Alireza是对的。无论如何,我接受了一个懒散的建议,在linq查询返回列表之后,我正在解析它。
2063717608
2063717609
2063717610
2063717611
2063717613
2063717614