我正在使用现有数据库进行EF CTP5 Code First开发。我需要通过比较不同类型的列来从两个表中获取数据。
例如 - p.ColumnA
varchar
为q.ColumnA
,int
为Convert.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}}
有人可以提出解决方案吗?感谢。
答案 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