Я работаю с ASP.NET 3.5 SP1 и у меня есть вопрос, на котором я застрял.У меня есть страница ASPX, на которой у меня есть 2 элемента управления повторителем, 1 вложенный в другой.Исходя из кода, у меня есть простой запрос LINQ To Entities, который извлекает данные, а затем я связываю эти данные с элементами управления повторителя.Страница ASPX показана ниже:
<asp:Repeater ID="rptrMain" runat="server">
<ItemTemplate>
<asp:Label ID="lblName" runat="server" ></asp:Label>
<asp:Label ID="lblDescription" runat="server"></asp:Label>
<asp:Repeater Runat="server" ID="rptrSub">
<ItemTemplate>
<asp:Label ID="lblPartName" runat="server" ></asp:Label>
<asp:Label ID="lblManufacturerName" runat="server" ></asp:Label>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
Я связываю данные с повторителями в следующем коде:
var q = from inventories in itemContext.Inventory.Include("Parts.Manufacturer")
select inventories;
List<Inventory> inventoryList = q.ToList();
rptrMain.DataSource = inventoryList ;
rptrMain.ItemDataBound += new RepeaterItemEventHandler(rptrMain_ItemDataBound);
rptrMain.DataBind();
void rptrMain_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Inventory inventory = e.Item.DataItem as Inventory;
Label lblName = e.Item.FindControl("lblName") as Label;
Label lblDescription = e.Item.FindControl("lblDescription") as Label;
lblName.Text = inventory.Name;
lblDescription.Text = inventory.Description;
Repeater rptrSub = e.Item.FindControl("rptrSub") as Repeater;
rptrSub.DataSource = inventory.Parts;
rptrSub.ItemDataBound += new RepeaterItemEventHandler(rptrSub_ItemDataBound);
rptrSub.DataBind();
}
}
void rptrSub_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Part part = e.Item.DataItem as Part;
Label lblPartName = e.Item.FindControl("lblPartName ") as Label;
Label lblManufacturerName = e.Item.FindControl("lblManufacturerName") as Label;
lblPartName.Text = part.Name;
lblManufacturerName.Text = part.Manufacturer.Name
}
}
Инвентарь имеет отношение 1 ко многим к Части и Частиимеет отношение один к одному с производителем.
Теперь мой вопрос: как отфильтровать дочерние объекты Inventory в запросе LINQ?Например, я бы хотел получить только те части, которые имеют определенный тип PartType.Например:
where parts.Type == Tire
Я нашел этот полезный совет http://blogs.msdn.com/b/alexj/archive/2009/06/02/tip-22-how-to-make-include-really-include.aspx Хотя это все еще не позволяет мне фильтровать дочерние объекты?