我正在使用Entity Framework从我的数据库中检索数据。您可以在此处查看数据库模型:
我正在尝试构建一个转发器,只有在有资源where IsProtected == false
时才会显示资源类别。然后是一个嵌套的转发器,显示资源本身。
这是一个缩写中继器,以帮助澄清我正在寻找的内容
<asp:Repeater>
<h2>Category Name</h2>
<ol>
<asp:Repeater DataSource="<%# ((ResourceCategory)Container.DataItem).Resource %>">
<li>Resource Name</li>
</asp:Repeater>
</ol>
</asp:Repeater>
我目前使用的查询确实提取了Resource.Count() > 0
的任何类别,但不知道如何编写我的where
语句,因为它实际上与Resource
相关表:
public List<Model.ResourceCategory> GetResourcesWithDocuments()
{
using (var context = new SafetyInSightEntities())
{
return (from cat in context.ResourceCategory.Include("Resource")
orderby cat.Name
where cat.Resource.Count > 0
select cat).ToList();
}
}
有人可以帮我改写我的LINQ查询,这样我的内部转发器只显示资源IsProtected == false
答案 0 :(得分:2)
我不确定你在问什么,但我想你想要这个?
public List<Model.ResourceCategory> GetResourcesWithDocuments()
{
using (var context = new SafetyInSightEntities())
{
return (from cat in context.ResourceCategory
orderby cat.Name
where cat.Resource.Any()
select new
{
CategoryName = cat.Name,
Resources = cat.Resource.Where(r => r.IsProtected == false).ToList()
}).ToList();
}
}
您可能希望使用All
而不是Any
,但根据问题不确定。
答案 1 :(得分:1)
试试这个:
public IEnumerable<ResourceCategoryFacade> GetResourcesWithDocuments() // return weaker interface
{
using (var context = new SafetyInSightEntities())
{
var q = from cat in context.ResourceCategory.Include(cat => cat.Resource)
orderby cat.Name
select new ResourceCategoryFacade // anonymous, or compiler-time type
{
CategoryName = cat.Name,
Resources = cat.Resource.Where(r => !r.IsProtected).ToList() // or ToArray()
};
return q.ToList(); // or ToArray()
}
}