1

我正在使用实体框架从我的数据库中检索数据。您可以在此处查看数据库模型:

edmx

我正在尝试构建一个转发器,仅在有资源时才显示资源类别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

4

2 回答 2

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,但根据问题不确定。

于 2013-02-26T03:22:04.973 回答
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()
    }
}
于 2013-02-26T03:35:33.330 回答