LinqToEntity连接int和字符串检查null

时间:2017-10-30 08:39:07

标签: c# linq-to-entities

我们有两张桌子:

TableA : ID (bigint),Title
TableB : ID (bigint),RelatedObjectID (varchar(36)),Title

我们想要这样的SQL查询:

SELECT a.Title as ATitle,b.Title as BTitle FROM TableA a INNER JOIN TableB b ON CAST(a.ID as varchar(36))=b.RelatedObjectID

以下是我们使用Linq编写的方式:

from a in TableA
join b in TableB on a.ID.ToString() equals b.RelatedObjectID

这就是我们得到的:

SELECT a.Title as ATitle,b.Title as BTitle FROM TableA a INNER JOIN TableB b ON CAST(a.ID as varchar(36))=b.RelatedObjectID OR (a.ID IS NULL AND b.RelatedObjectID IS NULL)

当我们在TableA上有大量记录时,这会使查询变得非常慢。

我无法理解发生了什么以及为什么检查空值。

1 个答案:

答案 0 :(得分:0)

由于linq-to-SQL与预期的SQL语句不同,为什么不将整个语句声明为字符串并通过C#对数据库运行查询?

 var strSql = "SELECT a.Title as ATitle,b.Title as BTitle FROM TableA
     a INNER JOIN TableB b ON CAST(a.ID as varchar(36))=b.RelatedObjectID";

 var query = _db.Database.SqlQuery<myModel>(strSql).ToList();