我们有两张桌子:
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上有大量记录时,这会使查询变得非常慢。
我无法理解发生了什么以及为什么检查空值。
答案 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();