public class BlogPost
{
public int BolgID
{
get;
set;
}
public int ID
{
get;
set;
}
public string Title
{
get;
set;
}
public virtual ICollection<Category> Category
{
get;
set;
}
public virtual BlogSite BlogSite
{
get;
set;
}
}
public class Category
{
public int ID
{
get;
set;
}
public string Title
{
get;
set;
}
public virtual ICollection<BlogPost> BlogPost
{
get;
set;
}
using(MyDemoContext context = new MyDemoContext())
{
DbSet<BlogPost> post = context.Set<BlogPost>();
//查出某篇博客的多种分类
var v = post.Include(p=>p.Category).Where(p=>p.ID==5).ToList();
Repeater1.DataSource = v;
Repeater1.DataBind();
}
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<thead>
<td>BlogID</td>
<td>BlogTitle</td>
<td>CategoryTitle</td>//Category的标题
</thead>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("ID")%></td>
<td><%# Eval("Title")%></td>
<td><%# Eval("")%></td>//这里怎么绑定
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
最终显示效果就是列出这篇博客对应的多种分类:
BlogID BlogTitle CategoryTitle
5 test C#
5 test asp.net
5 test 技术
原来用dataset就直接绑定了,现在使用EF的code frist查出的数据被分散到一个对象和一个对象集合里,在绑定repeater时怎么处理呢?
1.可以不用repeater啊。直接两个循环嵌套。
DbSet<BlogPost> post = context.Set<BlogPost>();
foreach(var item in post)
{
foreach(var category in item.Category.CreateSourceQuery())
{
%>
<tr>
<td><%=item.Title%></td>
<td><%=category.Title%></td>
</tr>
<%
}
)
}
2或者后台两张表join查询,得到一个list,然后repeater绑定这个list
在数据库中建立个视图,然后绑定视图就好了
用code frist再去数据库建视图就没啥意义了
把对象集合放在对象里
对象集合本来就在对象里,现在要绑定repeater怎么展现对象和对象集合的数据?
多嵌套一层repeater就可以了吧?
嵌套的结果就是
BlogID BlogTitle CategoryTitle
5 test C#, asp.net,技术
但是我想要的结果是:
BlogID BlogTitle CategoryTitle
5 test C#
5 test asp.net
5 test 技术