JoinOn 联合查询的问题

Jun 2, 2010 at 6:35 AM
    [JoinOn(0, typeof(pisoim_logs), "SenderPointIp", typeof(pisoim_point), "ip", CompareOpration.Equal, JoinMode.Inner)]
    [JoinOn(1, typeof(pisoim_logs), "ReceivePointIp", typeof(pisoim_point), "ip", CompareOpration.Equal, JoinMode.Inner)]
    public class Search_pisoim_logs : DbObjectModel<Search_pisoim_logs>
    {
        [DbColumn("pisoim_logs.id")]
        public new long Id { get; set; }
        [AllowNull]
        [DbColumn("pisoim_point.name")]
        public string SenderPointName { get; set; }
        [AllowNull]
        [DbColumn("pisoim_point.name")]
        public string ReceivePointName { get; set; }
    }
如上代码,pisoim_logs表包含SenderPointIp 和 ReceivePointIp 字段,都与 pisoim_point表对应,现在要分别取出 SenderPointIp、ReceivePointIp 对应的pisoim_point.name,改如何做?
Coordinator
Jun 2, 2010 at 9:13 AM
以前有人提过这种两个join都是同样的表的问题,目前DbEntry不支持。
其实,我也不是很理解这个查询,和只用一个 join,而设置条件为 pisoim_logs.SenderPointIp = pisoim_logs.ReceivePointIp 的查询有何差别?
Jun 2, 2010 at 9:31 AM
Edited Jun 2, 2010 at 9:36 AM

打个比方:

A表
+--------------+
| id | ipa | ipb |
+--------------+
| 1  | 01  | 02  |
| 2  | 03  | 04  |
+--------------+

B表
+-----------+
| ip | name  |
+-----------+
| 01 | A站    |
| 02 | B站    |
| 03 | C站    |
| 04 | D站   |
+-----------+


现在要得到下面的结果:
+----------------------------------+
| id | ipa | aname | ipb | bname |
+----------------------------------+
| 1  | 01  | A站     |  02  | B站      |
| 2  | 03  | C站     |  04  | D站     |
+----------------------------------+

这时就需要关联俩次B表分别取出name.

Coordinator
Jun 2, 2010 at 1:03 PM

目前这种情况只能通过SQL直接查询。

或者先搜索出A,再用ipa和ipb去查询B。

如果B表数据量不大,我的习惯是,取出B表所有数据到内存,在内存里整理A。

Jun 3, 2010 at 12:46 AM

改用用 DbEntry.Context.ExecuteDataset 方法实现了。

谢谢 lifeng。