对于亚音速我来说,我仍然相当新,并且发现最简单的事情有点棘手。 我有一个简单的查询,它连接两个表,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;从订阅到我的网格
还有其他建议吗?即使以上内容有效,我也不满意在选择中使用“订阅。”,“个人资料。”,我宁愿使用一些强类型值会导致更改,因此我会遇到编译错误,而不是在尝试运行查询时崩溃!
由于
贝克斯
答案 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];