gpt4 book ai didi

c# - ORMLite 加入多个表和多选

转载 作者:行者123 更新时间:2023-11-29 07:37:23 28 4
gpt4 key购买 nike

我在选择相同的 model 时遇到了一些问题两次和更多次 ORMLite .

我的查询执行各种 LeftJoin<Model1,Model2> ,然后它会做这样的事情:

.LeftJoin<Model2, Model3>((x, y) => x.id1== y.id1, dbConnection.JoinAlias("Alias1")
.LeftJoin<Model2, Model3>((x, y) => x.id2 == y.id2, dbConnection.JoinAlias("Alias2")
.LeftJoin<Model2, Model3>((x, y) => x.id3 == y.id3, dbConnection.JoinAlias("Alias3")
.LeftJoin<Model2, Model3>((x, y) => x.id4 == y.id4, dbConnection.JoinAlias("Alias4"))

如何使用 SelectMulti获得4次Model3 ?我的意思是这样的:

db.SelectMulti<Model1,Model2,Model3,Model3,Model3,Model3>(query);

很抱歉,如果我不清楚,但由于 NDA,我无法发布真实代码。

附言。我正在使用 C#

更新

我已经按照@mythz 的建议添加了以下代码(这是答案的最后一部分,因为我现在无法升级):

String customSelection = typeof(Model1).GetModelMetadata().Alias + ".*, 0 EOT," +
typeof(Model2).GetModelMetadata().Alias + ".*, 0 EOT," +
"Alias1.*, 0 EOT," +
"Alias2.*, 0 EOT," +
"Alias3.*, 0 EOT," +
"Alias4.*, 0 EOT";

然后,在我的查询中,我添加了这个:

.Select(customSelection);

现在我试着用这个得到结果:

dbConnection.Select<Model1, Model2, Model3, Model3, Model3, Model3>(query);

这会导致编译错误,它告诉我 IDbConnection不包含 Select 的定义和一个 Select接受类型为 IDbConnection 的第一个参数的方法没找到。 (编译器告诉我意大利语,我正在改写它)。

编译器的错误代码是CS1061 .

最佳答案

您将无法使用 SelectMulti API 来选择具有连接别名的表。有一个 example of selecting from multiple tables在 OrmLite 的主页中使用 JOIN 别名:

var q = db.From<Sale>()
.LeftJoin<Contact>((s,c) => s.SellerId == c.Id, db.JoinAlias("seller"))
.LeftJoin<Contact>((s,c) => s.BuyerId == c.Id, db.JoinAlias("buyer"))
.Select<Sale, Contact>((s,c) => new {
s,
BuyerFirstName = Sql.JoinAlias(c.FirstName, "buyer"),
BuyerLastName = Sql.JoinAlias(c.LastName, "buyer"),
SellerFirstName = Sql.JoinAlias(c.FirstName, "seller"),
SellerLastName = Sql.JoinAlias(c.LastName, "seller"),
});

当需要更精细的定制时,您可以 use Custom SQLDynamic ResultSet APIs .

我刚刚添加了对能够在 this commit 中指定自定义表选择的支持这将使您可以使用自定义别名选择表格,例如:

q = db.From<Sale>()
.LeftJoin<Contact>((s, c) => s.SellerId == c.Id, db.JoinAlias("seller"))
.LeftJoin<Contact>((s, c) => s.BuyerId == c.Id, db.JoinAlias("buyer"));

var results = db.SelectMulti<Sale, Contact, Contact>(q,
new[] { "Sale.*", "buyer.*", "seller.*" })

foreach (var result in results)
{
Sale sale = result.Item1;
Contact buyer = result.Item2;
Contact seller = result.Item3;
}

此更改从现在的 v5.0.3 开始可用 available on MyGet .

如果您无法升级,您可以通过使用自定义选择来获得相同的结果,例如:

var q = db.From<Sale>()
.LeftJoin<Contact>((s, c) => s.SellerId == c.Id, db.JoinAlias("seller"))
.LeftJoin<Contact>((s, c) => s.BuyerId == c.Id, db.JoinAlias("buyer"))
.Select("Sale.*, 0 EOT, buyer.*, 0 EOT, seller.*, 0 EOT");

var results = db.Select<Tuple<Sale, ContactIssue, ContactIssue>>(q);

关于c# - ORMLite 加入多个表和多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154310/

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