相关疑难解决方法(0)

过滤包含在EF Core中

我正在尝试过滤初始查询.我已经嵌套了包含模型的叶子.我正在尝试根据其中一个包含的属性进行过滤.例如:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .ToList();
}
Run Code Online (Sandbox Code Playgroud)

我怎么能说呢.Where(w => w.post.Author == "me")

entity-framework-core

29
推荐指数
5
解决办法
2万
查看次数

过滤包括LINQ和实体框架中的项目

我目前在我的应用程序中有这个LINQ/EF代码:

var rootCategoryItem = DatabaseContext.Categories
                            .Include("SubCategories")
                            .OrderBy(c => c.CategoryOrder)
                            .Single(c => c.CategoryId == 1);
Run Code Online (Sandbox Code Playgroud)

我知道在EF你不能过滤器中包含的项目着呢,我可以写一些代码LINQ过滤掉不需要的子类别...但LINQ代码将被转换成一个可怕的SQL是高度未优化.我也可以编写一个执行此操作的存储过程(并编写比LINQ更好的查询),但我真的想使用纯EF.

所以我留下了两个选项(除非有人可以看到其他选项).

第一个是遍历子类别,删除不需要的子类别:

        var subCategoriesToFilter = rootCategoryItem.SubCategories.ToList();

        for (int i = 0; i < subCategoriesToFilter.Count; i++)
        {
            if (subCategoriesToFilter[i].Deleted)
                rootCategoryItem.SubCategories.Remove(subCategoriesToFilter[i]);
        }
Run Code Online (Sandbox Code Playgroud)

第二种选择是在我看来:

<ul class="treeview ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion ui-widget ui-sortable ui-accordion-content-active">
@foreach (var categoryitem in Model.SubCategories.OrderBy(c => c.CategoryOrder))
{

    @if(!Model.Deleted)
    { 
        <li class="treelistitem" id="@Model.CategoryId">
            <div class="ui-accordion-header ui-state-default ui-corner-all ui-accordion-icons ui-sortable-handle first">
            <span class="clickable">
                <span class="ui-accordion-header-icon ui-icon treeviewicon treeviewplus"></span>
                <i class="glyphicon glyphicon-folder-open rightfolderpadding"></i><span class="categoryname">@Model.CategoryName</span>
            </span>
            </div> …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework

16
推荐指数
1
解决办法
2万
查看次数

实体框架代码优先 IQueryable 导航属性

我在互联网上看到的大多数示例都将导航属性显示为任一ICollection或直接List实现。它们通常是virtual, 以启用延迟加载。

但是,当您访问此类属性时,它将在内存中加载整个集合,并且如果您在它之后有一个子查询(即object.MyListProperty.Where(...)),我注意到将为MyListProperty.

我如何避免这种情况?where如果可能,我希望list 属性之后的子句在 SQL 服务器上执行。我可以使用IQueryable导航属性吗?这种情况有什么最佳实践吗?

c# entity-framework iqueryable ef-code-first

6
推荐指数
1
解决办法
1581
查看次数

在 EF Core 中过滤“包含”实体

我有以下型号

 public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
    public List<PersonRole> PersonRoles { get; set; }

}

public class RoleInDuty
{
    public int roleInDutyId { get; set; }
    public string Name { get; set; }
    public int typeOfDutyId { get; set; }
    public TypeOfDuty typeOfDuty { get; set; }
    public List<PersonRole> PersonRoles { get; set; }

}
public class PersonRole
{
    public int PersonId { get; set; }
    public Person …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core asp.net-core

5
推荐指数
1
解决办法
7844
查看次数