Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多个表和多选项的ORMLite联接_C#_Mysql_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">ormlite Servicestack - Fatal编程技术网 ormlite-servicestack,C#,Mysql,ormlite Servicestack" /> ormlite-servicestack,C#,Mysql,ormlite Servicestack" />

C# 具有多个表和多选项的ORMLite联接

C# 具有多个表和多选项的ORMLite联接,c#,mysql,ormlite-servicestack,C#,Mysql,ormlite Servicestack,我在使用ORMLite两次或多次选择同一型号时遇到了一些问题 我的查询执行各种LeftJoin,然后执行如下操作: .LeftJoin<Model2, Model3>((x, y) => x.id1== y.id1, dbConnection.JoinAlias("Alias1") .LeftJoin<Model2, Model3>((x, y) => x.id2 == y.id2, dbConnection.JoinAlias("Alias2") .Left

我在使用ORMLite两次或多次选择同一型号时遇到了一些问题

我的查询执行各种LeftJoin,然后执行如下操作:

.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"))
db.SelectMulti<Model1,Model2,Model3,Model3,Model3,Model3>(query);
我很抱歉,如果我不清楚,但我不能发布真正的代码,由于保密协议

另外,我和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的定义,并且找不到接受IDbConnection类型的第一个参数的Select方法。编译器告诉我,用意大利语,我正在重新表述它


编译器的错误代码是CS1061。

您将无法使用SelectMulti API来选择具有联接别名的表。在OrmLite的主页中有一个带有连接别名的链接:

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"),
    });
当需要更细粒度的自定义时,您可以使用

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

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中获得

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

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

我还是不能让它工作。。。我已经编辑了原始问题,并附上我的尝试,以遵循你的最后建议。谢谢你的邀请patience@magicleon仔细复制我的代码,您可能需要使用。选择或升级到v5.0.3以使用新的SelectMulti。如果遇到问题,请参阅我链接到的提交中的工作集成测试。如果您仍然存在问题,请创建一个显示该问题的虚拟示例。如果我放置Tuple,它会告诉我非泛型Tuple type不能与type一起使用arguments@magicleon当然,Tuple允许类型化参数。集成测试显示了一个工作示例,请严格遵循它。如果你得到了一个编译错误,你就做错了。好吧,这似乎是可行的。唯一的问题是我的元组中有太多的元素,我必须使用TRest,我相信它不受支持,对吗?