比较String列和Int列

时间:2011-05-27 21:15:58

标签: c# linq-to-entities entity-framework-ctp5

我正在使用现有数据库进行EF CTP5 Code First开发。我需要通过比较不同类型的列来从两个表中获取数据。

例如 - p.ColumnA varcharq.ColumnAintConvert.ToInt32,但少数记录的值可能相同。所以,我正在努力做from p in context.TableA from q in context.TableB where p.ColumnZ == "ABC" && (p.ColumnA == null || Convert.ToInt32(p.ColumnA) == q.ColumnA) && (p.ColumnB == null || p.ColumnB == q.ColumnB) select p.ColumnC 这不起作用。我没有完全控制数据库来修改表。

{{1}}

有人可以提出解决方案吗?感谢。

2 个答案:

答案 0 :(得分:3)

当您编写与实体框架交互的linq语句时,它会尝试将所有命令转换为SQL。因为Convert.ToInt32没有sql命令,所以会抛出错误。  This post描述了一种调用sql函数来转换类型的方法。它应该对你有帮助。

答案 1 :(得分:0)

正如其他海报所解释的那样,LINQ to SQL 实体不知道如何将Convert.ToInt32转换为SQL表达式(LINQ to SQL显然可以处理这个问题)。据我所知,它也不支持int.Parse。但是,由于您只是进行相等比较(而不是更大/更小),您应该能够通过将int转换为string来实现相同的结果,而不是转换{{ 1}}到string

int