如何在包含相关实体的实体中应用过滤条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在包含相关实体的实体中应用过滤条件相关的知识,希望对你有一定的参考价值。

如何使用方法语法将此SQL查询转换为LinqToEntity语法?

SELECT  Recurso.IdRecurso, Recurso.Codigo, 
        Recurso.Titulo, Recurso.Descripcion
FROM    Recurso INNER JOIN
        RecursoUsuario ON Recurso.IdRecurso = RecursoUsuario.IdRecurso
WHERE   (RecursoUsuario.IdUsuario = 1)

我接下来测试,但错误在.Where(x => x.RecursoUsuario.IdUsuario == idUsuario)

 public List<Recurso> RecursosPorUsuario(int idUsuario)
        {
            List<Recurso> ru = 
                bd.Recurso.Include("RecursoUsuario")
                .Where(x => x.RecursoUsuario.IdUsuario == idUsuario);

            return ru;
        }

你能帮忙吗?

答案

免责声明:我是Entity Framework Plus项目的所有者

EF + Query IncludeFilter功能允许过滤相关实体。

public List<Recurso> RecursosPorUsuario(int idUsuario)
{
    List<Recurso> ru = bd.Recurso
                         .IncludeFilter(x => x.RecursoUsuario
                                              .Where(x => x.RecursoUsuario.IdUsuario == idUsuario))
                         .ToList();

    return ru;
}

维基:EF+ Query IncludeFilter

解决方案#2

另一种技术是使用投影(这是我的图书馆在幕后做的)

public List<Recurso> RecursosPorUsuario(int idUsuario)
{
    List<Recurso> ru = bd.Recurso
                         .Select(x = new {
                            Recurso = x,
                            RecursoUsuarios = x.RecursoUsuario.
                                               .Where(x => x.RecursoUsuario.IdUsuario == idUsuario)
                         })
                         .ToList()
                         .Select(x => x.Recurso)
                         .ToList();

    return ru;
}

以上是关于如何在包含相关实体的实体中应用过滤条件的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤具有多个条件的托管对象实体

递归算法应用——实体树过滤解析

如何按包含的实体搜索/选择,但将所有相关实体包含到结果集中

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

使用 SonataAdminBundle。在两步相关实体上配置过滤器

如何使用谓词过滤子实体集合?