【问题标题】:Subsonic 2.2 Binding joined table columns to a gridSubsonic 2.2 将连接的表列绑定到网格
【发布时间】:2010-11-16 14:52:05
【问题描述】:

我对亚音速还是比较陌生,发现最简单的东西有点棘手。 我有一个简单的查询,它连接了两个表,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>

但是我得到了一个错误,类似于

订阅不是 简介

我尝试更新我的查询,使其在选择中包含列名,但我也遇到了上述错误。

     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;

在我的网格中,我现在可以将配置文件表中的 和订阅中的 绑定到我的网格

还有其他建议吗? 尽管上述方法有效,但我不喜欢在选择中使用“Subscription.”、“Profile.”,但我宁愿使用一些强类型值以防万一发生变化,所以我得到编译错误,而不是在尝试运行查询时崩溃!

谢谢

贝克斯

【问题讨论】:

    标签: subsonic


    【解决方案1】:

    你需要查看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];
    

    【讨论】:

    • 我正在使用上面的亚音速查询工具(不是吗?)但我仍在返回一个集合(在这种情况下为 Profile 类型)所以我仍然无法弄清楚如何将它们绑定到网格,因为我得到与上面相同的错误!它应该返回其他东西吗?如果我能提供帮助,我宁愿避开 SP,但到目前为止,我在执行实际连接时没有遇到问题,它只是将连接表中的结果绑定到网格。你能举例说明我是如何做到这一点的吗?
    • 您可以将 SubSonic 查询结果绑定为 DataTable、Reader 或 Collection。如果您想要一个强类型集合,请使用集合 Load() 方法并传入查询(参见上面的示例)。
    • 当我绑定到我的网格时,您上面的示例是否允许我访问 ?
    • 不,它只会为您提供 ProfileCollection 中可用的属性。集合是强类型的,您不能向它们添加新属性。如果要混合和匹配列,则需要使用 SqlQuery 并通过将列添加到 Select(.,
      .) 函数调用来选择列。
    • 这是我最初的问题..!我尝试将 table.column 添加到选择中,但由于它带回了一个配置文件集合,它只看到配置文件列!我假设我需要返回一个数据集?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多