linq join on 多条件查询 or 连接

菜鸟6号 2014-10-11 10:04:14
select *
from tabel1
inner join table2
on tabel1.id = table2.recipegroupid
or tabel1.id = table2.recipeitemid



把上面sql语句转换为linq,注意多条件查询中用的是 or 连接
...全文
3237 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-10-11
  • 打赏
  • 举报
回复
昨天回答过你了。
引用 1 楼 dongxinxi 的回复:
换成where一样的 var result = from t1 in table1 from t2 in table2 where t1.id == t2.recipegroupid || t1.id == t2.recipeitemid select t1; 或者子查询
换成where结果一样,但是实现机制不同,所以性能上有很大的差距。join的复杂度是log(N),迪卡尔乘积再where过滤的复杂度是N^2。这个昨天也和lz说过了。
q107770540 2014-10-11
  • 打赏
  • 举报
回复
用where是个解决方案,但是用WHERE后就不是INNER JOIN了,而是 CROSS JOIN了
  • 打赏
  • 举报
回复
换成where一样的 var result = from t1 in table1 from t2 in table2 where t1.id == t2.recipegroupid || t1.id == t2.recipeitemid select t1; 或者子查询
threenewbee 2014-10-11
  • 打赏
  • 举报
回复
引用 5 楼 dongxinxi 的回复:
那就分别Join,将结果集Union 如果是内存对象就好办了(自己实现一个比较器),SQL查询没想到更好的办法 如果两个字段只有一个有值,那就用IsNull(table2.recipegroupid, table2.recipeitemid) Linq中用Nullable<int>.HasValue判断 这种表的设计没有遇到过,一个表的主键同时对应到另一个表的两个字段,如果用到了联合主键,表之间也应该保持对应
该说的都和他说过了,包括用union,以及直接用sql。
  • 打赏
  • 举报
回复
那就分别Join,将结果集Union 如果是内存对象就好办了(自己实现一个比较器),SQL查询没想到更好的办法 如果两个字段只有一个有值,那就用IsNull(table2.recipegroupid, table2.recipeitemid) Linq中用Nullable<int>.HasValue判断 这种表的设计没有遇到过,一个表的主键同时对应到另一个表的两个字段,如果用到了联合主键,表之间也应该保持对应
菜鸟6号 2014-10-11
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
昨天回答过你了。 [quote=引用 1 楼 dongxinxi 的回复:] 换成where一样的 var result = from t1 in table1 from t2 in table2 where t1.id == t2.recipegroupid || t1.id == t2.recipeitemid select t1; 或者子查询
换成where结果一样,但是实现机制不同,所以性能上有很大的差距。join的复杂度是log(N),迪卡尔乘积再where过滤的复杂度是N^2。这个昨天也和lz说过了。[/quote] 表1和表2的数据都比较大,可能过千万条数据,用where性能不是会很底

8,492

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧