扁平化实体框架对象查询结果包含



我正试图掌握实体框架,有一件事真的让我绊倒。这并没有帮助,我仍然不是完全确定的术语,我试图避免学习LINQ在同一时间,所以谷歌是困难的。

我有两个表,公司和地址,它们具有一对多的关系。如果我这样写:

ObjectQuery<Company> companies = queryContext.Companies.Include("Addresses");

它看起来像我得到我想要的(公司->结果视图[0].地址。计数> 0)

我现在想做的是绑定公司名称和所有地址到一个ASP中的gridview。网络应用

this.CompaniesGrid.DataSource = companies;
this.CompaniesGrid.DataBind();

<asp:GridView runat="server" ID="CompaniesGrid" AllowSorting="true">
    <Columns>
        <asp:BoundField DataField="Name" />
        <asp:BoundField DataField="Address" />
    </Columns>
</asp:GridView>

这本身抛出一个错误(A field or property with the name 'Address' was not found on the selected data source) -我认为是因为companies -> Results View[0]。Name存在,但. address不存在(因为它隐藏在Addresses关系中)。绑定地址。地址也没用

我在这个线程的底部发现了一个非常丑陋的解决方案,但如果可能的话,我宁愿避免它。

是否有任何方法来"扁平化"我的结果,以便顶层对象提供地址到所有包含的字段?

任何帮助都非常感谢!

objectquery返回一个图。但是我认为如果你想用。net编程,你真的应该忍一忍,学习linq。你可以编写一个投影查询来返回平面化的结果,并将它们绑定到ASP.NET中。

扁平化的诀窍是从关系中的"孩子"开始。像这样:

grid.datasource= context.Addresses.Select
          (a=>new {a.Company.CompanyName,a.Street, a.City}).ToList();

(代码不保证,因为stackoverflow UI不提供。net智能感知或编译时检查。天哪)。.

我不完全明白为什么你发现使用模板字段的解决方案是丑陋的?

绑定字段只能绑定到常规属性。要绑定到导航属性,你必须使用Template字段。

所以你提到的线程中的代码解决了你的问题。

如果你真的觉得这很难看,你可以实现你自己的绑定字段,使它支持嵌套绑定,但我认为使用模板字段是一个更好的解决方案

相关内容

  • 没有找到相关文章

最新更新