将linq中的字符串转换为大数据库中的实体

时间:2012-05-09 14:05:59

标签: c# sql-server sql-server-2008 entity-framework linq-to-entities

我将linq中的字符串转换为int实体但转换为.ToInt32和int.Parse无法转换为sql 而且我的数据库很大,无法将所有内容都记录下来(超过60k的记录并变大) 我的查询类似于

int myNumber = 1390;
var result = from dr in myEntitiy.TableX
             where (Convert.ToInt32(dr.stringYear) > myNumber) // <== error
             select dr; 

错误说不能翻译转换方法

  

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

最新解决方案

更新: 如果没有办法做到这一点,请确认这一点,然后我必须更改数据库中的字段类型,但这将很难:(

2 个答案:

答案 0 :(得分:3)

我认为将比较作为字符串是相当安全的,除非你有多年&lt; 1000或&gt; 9999:

... dr.stringYear.CompareTo(myNumberString) > 0

优点是stringYear上的任何索引都可以在执行计划中使用。将stringYear转换为数字可以消除任何索引。

答案 1 :(得分:1)

这样可行,但生成的SQL会很混乱

int myNumber = 1390;
var result = from dr in myEntitiy.TableX
             let num = myEntitiy.TableX.Take(1).Select(x => dr.stringYear).Cast<int>().FirstOrDefault()
             where num > myNumber
             select dr;