我有一个asp.net会员资格申请。这是它的工作原理:各种组织可以在门户网站上注册,然后可以在自己的网站上注册成员。例如,当组织A注册时,他继续在其组织下创建成员。我有一切都在运行但我希望自己作为superAdmin能够知道每个组织的成员数量。这就是我想要的方式,在页面加载时,我想将所有组织(从组织表)绑定到转发器,然后从成员表中获取每个成员的数量
private bool BindConfirmedUsers()
{
var approved = cooperative.Coops.Where(m => m.UserStatus == "Approved").OrderByDescending(m => m.CoopId).ToList();
try
{
if (!approved.Any())
{
RepeaterAccepted.DataSource = new List<Coop>();
RepeaterAccepted.DataBind();
return false;
}
RepeaterAccepted.DataSource = approved;
RepeaterAccepted.DataBind();
return true;
}
catch (Exception ex)
{
return false;
}
}
以上代码将为我提供所有组织,但我需要获得属于组织的每个成员的计数。让我做一个我的数据库结构的演示
table Organization
ID NAME USERNAME
1 OrgA myusername 2 OrgB otherUsername
Members Table
ID ORGId用户名 1 2用户 2 2 user2 3 1 user3
以上就是我如何设计表格。(OrgId是组织表中的外键)
<table id="example2" class="table table-bordered table-hover">
<thead>
<tr>
<th>Coop ID</th>
<th>Organization Name</th>
<th>Address</th>
<th>Phone Number</th>
<th>Registered Members</th>
</tr>
</thead>
<asp:Repeater ID="RepeaterAccepted" runat="server" OnItemDataBound="RepeaterAccepted_ItemDataBound">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<tbody>
<div class="col-lg-12 col-md-12 col-xs-4">
<tr>
<td><span><%# Eval("Coopcode") %></span></td>
<td><span><%#Eval("CoopName") %></span></td>
<td><span><%#Eval("CompanyAddress") %></span></td>
<td><span><%#Eval("PhoneNumber") %></span></td>
<td><span><asp:Label ID="labelMembers" runat="server"></asp:Label></span></td>
</tr>
</div>
</tbody>
</ItemTemplate>
</asp:Repeater>
</table>
剩下的就是将2传递给标签(labelMembers),表明OrgB有两个注册成员。我希望我的事情足够清楚
答案 0 :(得分:0)
由于您的Members表有一个引用Organization表的外键,我假设你的Coop类(我假设它是Organization表的EF类)应该有这样的属性:
public IQueryable<Member> Members { get; set; }
用于与Members表的master-detail关系。 因此,您可以使用Linq来计算每个组织的成员数量
var approved = cooperative.Coops.Where(m => m.UserStatus == "Approved").OrderByDescending(m => m.CoopId).Select(m =>
new
{
m.Coopcode,
m.CoopName,
CoopAddress = m.CompanyAddress,
m.PhoneNumber,
MembersCount = m.Members.Count()
});
在您的网页上使用Eval(&#39; MembersCount&#39;)。