亚音速2.2绑定将表格列连接到网格

时间:2010-11-16 14:52:05

标签: subsonic

对于亚音速我来说,我仍然相当新,并且发现最简单的事情有点棘手。 我有一个简单的查询,它连接两个表,Profile和Subscription。

  ProfileCollection profiles =
            new Select().From<Profile>()
                .InnerJoin(Subscription.ProfileIdColumn,Profile.ProfileIDColumn )
                .Where(Subscription.ExpiryDateColumn).IsLessThan(Date)
                .ExecuteAsCollection <ProfileCollection > ();
        return profiles;

我想在我的网格中显示以下列,Profile.Name和Subscription.ExpiryDate以及其他一些列。

以前我使用过LLBLGen,我可以做类似的事情(请注意这是伪代码):

<repeater>    
<itemitemplate>

<%#Eval("Name")%>
<%#Eval("Subscription.ExpiryDate")%>  
</itemitemplate>   

</repeater>

但我得到的错误是

  

订阅不是其成员   资料

我尝试更新我的查询,因此它在select中有列名,但我也遇到了上述错误。

     ProfileCollection profiles =
                new Select(Subscription.ExpiryDateColumn.PropertyName,
Profile.NameColumn.PropertyName).From<Profile>()
                    .InnerJoin(Subscription.ProfileIdColumn,Profile.ProfileIDColumn )
                    .Where(Subscription.ExpiryDateColumn).IsLessThan(Date)
                    .ExecuteAsCollection <ProfileCollection > ();
            return profiles;

这似乎是非常常见的事情,我发现需要绑定到网格并从连接表中调用列的多个位置,但似乎不可能。

有人可以告诉我我缺少什么,或者让我知道将连接表行绑定到亚音速网格的最佳方法吗?

我的解决方案 好的,从下面的答案我已经确定我需要做以下事情: 我用过*所以我可以带回所有行

 Dataset profiles =
                new Select("Subscription.*","Profile.*").From<Profile>()
                    .InnerJoin(Subscription.ProfileIdColumn,Profile.ProfileIDColumn )
                    .Where(Subscription.ExpiryDateColumn).IsLessThan(Date)
                    .ExcecuteDataset();
            return profiles;

在我的网格中,我现在可以绑定&lt;%#Eval(“Name”)%&gt;从配置文件表和&lt;%#Eval(Subscription.ExpiryDate))%&gt;从订阅到我的网格

还有其他建议吗?即使以上内容有效,我也不满意在选择中使用“订阅。”,“个人资料。”,我宁愿使用一些强类型值会导致更改,因此我会遇到编译错误,而不是在尝试运行查询时崩溃!

由于

贝克斯

1 个答案:

答案 0 :(得分:0)

你需要查看SubSonic Query Tool来执行连接,附加的链接有很多应该有用的示例。如果你必须与SubSonic进行复杂的连接,我建议你将逻辑移到存储过程。下面,将创建一个查询,返回您在Select()方法中列出的列。

示例:

SqlQuery q = new Select(Subscription.ExpiryDateColumn.PropertyName, Profile.NameColumn.PropertyName).From<Profile>()
                    .InnerJoin(Subscription.ProfileIdColumn,Profile.ProfileIDColumn )
                    .Where(Subscription.ExpiryDateColumn).IsLessThan(Date);

DataTable dt = q.ExecuteDataSet().Tables[0];