【问题标题】:Entity framework filter lambda navigation properties实体框架过滤器 lambda 导航属性
【发布时间】:2015-11-19 18:47:49
【问题描述】:

使用 .NET Entity Framework 6 我需要过滤包含的虚拟集合的元素。我的意思很容易用以下代码解释:

context.MyEntity.Include( navigationPropertyCollection => navigationPropertyCollection.Where( np => np.IsActive() ) )

代码代码只是一个示例,从 MyEntity 中说我只想包含 navigationPropertyCollection 的活动元素。

有什么聪明的方法吗?

【问题讨论】:

    标签: c# .net lambda entity-framework-6


    【解决方案1】:

    请注意,目前无法过滤加载了哪些相关实体。包含将始终引入所有相关实体。

    msdn reference

    你可以通过匿名投影试试这个

    var resultObjectList = _context.
                       Parents.
                       Where(p => p.DeletedDate == null).
                       OrderBy(p => p.Name).
                       Select(p => new
                                 {
                                     ParentItem = p,
                                     ChildItems = p.Children.Where(c => c.Name=="SampleName")
                                 }).ToList();
    

    Similar Answer in Stack

    【讨论】:

    • 感谢 Eldho 的回答,您的解决方案当然有效,但使用匿名类型您正在更改域,这不是明智的原因,因为需要将所有对象转换到正确的域。
    • @Zeta 你可以直接投影到your viewmodel 而不是匿名投影。试试这个Select(p=> new YourModel{ ParentItems = p, ChildItems= p.ChildItems}).ToList();documentation.devexpress.com/#WPF/CustomDocument17979
    • .Select() 函数中使用谓词生成的 sql 代码会影响过滤所有子项,就像我需要的那样。按照我在根问题中的示例,代码将是:context.MyEntity.Include( myentity => myentity.navigationPropertyCollection ).Select( myentity => myentity.navigationPropertyCollection.Where( n => m.IsActive()) );
    • 我认为它的工作原理与上面的代码相同。 Select()IQuerable 扩展名,因此您可以将查询添加到数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2016-05-29
    相关资源
    最近更新 更多