【发布时间】:2021-06-22 08:07:07
【问题描述】:
我有以下带有 JOIN 的 sql,但它返回的记录数为 50,但是当我将其转换为 LINQ 时,我没有得到匹配的计数。我注意到当我添加 ON 子句时,visual studio intellisense 下拉菜单不显示第二个表的 ID 属性。我想知道这是否是一个问题。
这是简单的 SQL
SELECT * FROM Table1 T1 JOIN Table2 T2 ON T1.MyId = T2.MyId WHERE T1.IsCompleted
这是我的 Lamba LINQ,其中包含 VC Intellisense 无法正常工作的评论。对于 table2,intellisense 下拉列表,它只显示 Equals、GetHashCode、GetType 和 ToString。只需手动输入 MyId 即可成功构建所有内容,但计数太高。谢谢
var test = this.myDbContent.Table1
.Join (this.myDbContent.Table2
table1 => table1.MyId,
table2 => table2.MyId,
(table1, table2) => new { table1, table2}
)
.Where (joinedTable => joinedTable.Table1.IsCompleted == 1)
【问题讨论】:
-
您的应用程序很可能不需要
JOIN。您是否考虑过使用相关实体,例如var testx = this.myDbContent.Table1.Select(t => new Tuple<int,int>(t.MyId, t.Table2.MyId)); -
我意识到这不是对您问题的直接回答,但是带有实体框架的 LINQ 作为 SQL 的直接逐语句替代品并不总是很好。如果您使用实体模型,您可能会得到更好、更容易的结果。
-
ORM 被证明是一个令人头疼的问题,也是浪费时间的来源,因为这些事情可以通过 SQL 轻松高效地实现。
-
@Tarik,试试
linq2db -
@SvyatoslavDanyliv 快速浏览了一下。只要事情简单(对于其他 ORM),一切都很好。如此简单的库在哪里进行连接? AFAIK 实体框架能够处理这个问题并构建一个包含连接的 SQL 语句。处理复杂的查询是另一回事。我的结论是带有 DataTables 的 ADO.Net 提供了一个更好的框架。