Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/45.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ to实体选择连续字符串项_C#_Linq_Entity Framework - Fatal编程技术网

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