b.Id == btb.Blog-6ren">
gpt4 book ai didi

servicestack - TableAlias 不适用于多个连接

转载 作者:行者123 更新时间:2023-12-04 07:27:56 24 4
gpt4 key购买 nike

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");

关于servicestack - TableAlias 不适用于多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68122859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com