Select 不同的加入 table
Select distinct on joined table
我有这个问题
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct();
var results = Db.Select<BlogCategory>(q);
它生成这个 SQL:
SELECT DISTINCT "blog".*, 0 EOT, "blog_category".*, 0 EOT
FROM "blog" LEFT JOIN "blog_to_blog_category" ON
("blog"."id" = "blog_to_blog_category"."blog_id") INNER JOIN "blog_category" ON
("blog_category"."id" = "blog_to_blog_category"."blog_category_id")
WHERE ...
我想 select 不同 blog_category
但是 select 也在添加所有 blog
字段所以我得到重复的 blog_category
条目。
如何 select 区分连接的 table 字段?
在 OrmLite 中,SqlExpression 是构建要执行的 SQL 查询的内容:
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct();
虽然 API 用于执行查询将结果映射回指定的模型,但在这种情况下,您是说您希望将上述查询的结果映射到 BlogCategory
POCO:
var results = Db.Select<BlogCategory>(q);
但您需要确保您创建的查询 returns 结果可以映射到您指定的 POCO。
如果您只想 select 不同的 BlogCategory
列,您需要在 SqlExpression 中执行此操作:
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct<BlogCategory>(c => c);
或者,如果您想要 select 跨不同联接表的列,您将使用标准的匿名类型表达式:
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct<Blog,BlogCategory>((b,c) => new { b.Id, c.Name, ... });
那么您将结果映射到的自定义模型应该具有与返回的列相匹配的属性:
var results = db.Select<BlogCategoryResult>(q);
或者,您可以使用 Dynamic Result Set API 访问自定义结果集。
我有这个问题
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct();
var results = Db.Select<BlogCategory>(q);
它生成这个 SQL:
SELECT DISTINCT "blog".*, 0 EOT, "blog_category".*, 0 EOT
FROM "blog" LEFT JOIN "blog_to_blog_category" ON
("blog"."id" = "blog_to_blog_category"."blog_id") INNER JOIN "blog_category" ON
("blog_category"."id" = "blog_to_blog_category"."blog_category_id")
WHERE ...
我想 select 不同 blog_category
但是 select 也在添加所有 blog
字段所以我得到重复的 blog_category
条目。
如何 select 区分连接的 table 字段?
在 OrmLite 中,SqlExpression 是构建要执行的 SQL 查询的内容:
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct();
虽然 API 用于执行查询将结果映射回指定的模型,但在这种情况下,您是说您希望将上述查询的结果映射到 BlogCategory
POCO:
var results = Db.Select<BlogCategory>(q);
但您需要确保您创建的查询 returns 结果可以映射到您指定的 POCO。
如果您只想 select 不同的 BlogCategory
列,您需要在 SqlExpression 中执行此操作:
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct<BlogCategory>(c => c);
或者,如果您想要 select 跨不同联接表的列,您将使用标准的匿名类型表达式:
var q = Db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where( .. )
.SelectDistinct<Blog,BlogCategory>((b,c) => new { b.Id, c.Name, ... });
那么您将结果映射到的自定义模型应该具有与返回的列相匹配的属性:
var results = db.Select<BlogCategoryResult>(q);
或者,您可以使用 Dynamic Result Set API 访问自定义结果集。