TableAlias 不适用于多个连接

游击队

TableAlias 不适用于多个连接。

查询:

var q = Db.From<Blog>(Db.TableAlias("b"))
    .LeftJoin<Blog, BlogToBlogCategory>((b,btb)=> b.Id == btb.BlogId, Db.TableAlias("btbc"))
    .Join<BlogToBlogCategory, BlogCategory>((bt,bc)=>bt.BlogCategoryId == bc.Id, Db.TableAlias("cats"))
    .GroupBy(x => x.Id);
    .Select("b.*, json_agg(cats) as BlogCategoriesJson");

var results = Db.Select<BlogQueryResponse>(q);

生成此 SQL:

SELECT b.*, json_agg(cats) as BlogCategoriesJson
FROM "blog" "b" LEFT JOIN "blog_to_blog_category" "btbc" ON ("b"."id" = "btbc"."blog_id") INNER JOIN "blog_category" "cats" ON ("blog_to_blog_category"."blog_category_id" = "cats"."id")
GROUP BY "b"."id"

这会导致错误,因为它正在引用"blog_to_blog_category"而不是btbc

神话

Db.TableAlias()只提供目标别名连接表,你的内连接不指定要使用的别名源表,以便它引用如预期完整的表名。

您可以Sql.TableAlias()在 LINQ 表达式中使用来引用表别名,例如:

var q = Db.From<Blog>(Db.TableAlias("b"))
    .LeftJoin<Blog, BlogToBlogCategory>((b,btb)=> b.Id == btb.BlogId, Db.TableAlias("btbc"))
    .Join<BlogToBlogCategory, BlogCategory>((bt,bc)=>
         Sql.TableAlias(bt.BlogCategoryId, "btbc") == bc.Id, Db.TableAlias("cats"))
    .GroupBy(x => x.Id);
    .Select("b.*, json_agg(cats) as BlogCategoriesJson");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章