使用LINQ to Entities选择连续的字符串条目

时间:2013-09-23 18:18:51

标签: c# linq entity-framework

起初你可能认为这与this问题重复,但希望你会发现它不是。

我还想选择连续的行组,但是考虑到这次条目是电话号码,因此存储为字符串。

我一直在尝试像:

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();

但这失败了:

LINQ to Entities无法识别方法'Int32 ToInt32(System.String)'方法,并且此方法无法转换为商店表达式。

我知道LINQ to Entities不支持Convert.ToInt32,但我在这里没有想法让它发挥作用。

所以,如果我的数据库有:

2063717608
2063717609
2063717610
2063717611
2063717613
2063717614

如何根据字符串值选择连续的行?当查询连续3个数字时,得到的结果如下:

  • 从2063717608到2063717610
  • 从2063717609到2063717611

1 个答案:

答案 0 :(得分:1)

1-如果您了解调用AsEnumerable()的性能副作用,请转发您的查询并在内存中对检索到的实体进行转换。

2-如果您不想要解决方案#1,则必须寻找解决转换问题的方法:

2-1-将数据库中的列类型更改为int

2-2-或者选择之前由其他开发者提出的解决方案之一,例如:

Problem with converting int to string in Linq to entities