.NET Chloe.ORM v2.10 简化多表连接查询

2017年06月19日

Chloe.ORM:一款高质量的.Net C#数据库访问框架(ORM)。支持SqlServer、MySql、Oracle及SQLite,实体为纯POCO,支持基本数据类映射的同时也支持枚举类型。查询接口借鉴linq,支持lambda表达式,高效便捷开发。借助lambda表达式,完全用面向对象的方式就能轻松执行多表连接查询、分组查询、聚合查询、插入数据、批量删除和更新满足条件的数据等操作,开发容错率极高。

更新内容:

  • 增加更易用的多表连接查询接口 DbContext.JoinQuery

  • 修改连续调用 Skip 方法时生成错误的 sql 语句 bug,如 IQuery.Skip(10).Skip(5)

API文档:http://www.52chloe.com/Wiki/Document

展开阅读全文
11 收藏
分享
加载中
精彩评论

引用来自“eechen”的评论

查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):
$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.

另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
dbContext.JoinQuery<post_tag,post>((post_tag,post) => new object[]
{
JoinType.InnerJoin, post_tag.post_id = post.id && post_tag.tag_id = 1
})
.Select((post_tag,post) => new { post_tag,post })
.OrderbyDesc(a=>a.post_tag.post_id )
.TakePage(1,20)
2017-06-19 18:34
1
举报
查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):
$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.

另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
2017-06-19 17:57
1
举报
最新评论 (5)
2017-06-21 21:17
0
回复
举报
2017-06-20 09:00
0
回复
举报

引用来自“eechen”的评论

查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):
$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.

另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
dbContext.JoinQuery<post_tag,post>((post_tag,post) => new object[]
{
JoinType.InnerJoin, post_tag.post_id = post.id && post_tag.tag_id = 1
})
.Select((post_tag,post) => new { post_tag,post })
.OrderbyDesc(a=>a.post_tag.post_id )
.TakePage(1,20)
2017-06-19 18:34
1
回复
举报

引用来自“eechen”的评论

查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):
$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.

另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
这个 @eechen 就是个笑话,天天要喊着吊打,结果现在挂在树上惨遭吊打,屁都不敢放一个,又一个神棍被拉下神坛 --via FalconChen . 有链接有真相: https://www.oschina.net/question/253880_2236467
2017-06-19 17:57
0
回复
举报
查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):
$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.

另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
2017-06-19 17:57
1
回复
举报
更多评论
6 评论
11 收藏
分享
返回顶部
顶部