【问题标题】:Querying nested/related entities in Entity Framework using Linq使用 Linq 在 Entity Framework 中查询嵌套/相关实体
【发布时间】:2017-11-27 07:04:54
【问题描述】:

我有以下实体

public partial class Resource
    {
        public int Id { get; set; }
        public string Description{ get; set; }

        public virtual ICollection<ResourceCapability>  ResourceCapability { get; set; }
    }

 public partial class Capability
    {
        public int Id { get; set; }
        public string Description{ get; set; }

        public virtual ICollection<ResourceCapability> ResourceCapability   { get; set; }

    }

 public partial class ResourceCapability
    {
        public int Id { get; set; }
        public int ResourceId { get; set; }
        public int CapabilityId { get; set; }

        public virtual Resource Resource { get; set; }
        public virtual Capability Capability { get; set; }
    }

现在一个资源可以具有多种功能,例如 C#、JAVA 等,并且多个资源可以具有相同的功能,例如多个资源具有 C# 功能等等。

我正在尝试获取具有特定(一个或多个)功能的所有资源的列表。我如何使用 Linq 做到这一点?

以下代码返回加入表的列表,而不是资源

dbset.Select(x => x.ResourceCapability.Where(y => list.Contains(y.Capability.Description))).ToList();

其中列表是List&lt;string&gt;,包含功能描述

【问题讨论】:

    标签: asp.net entity-framework linq


    【解决方案1】:

    以下代码返回加入表的列表,而不是 资源

    这是预期的,因为 linq dbset.Select(x =&gt; x.ResourceCapability // ...ResourceCapability 集上的投影。

    以下查询应该适合您:

    ctx.ResourceCapability.Where(x => list.Contains(x.Capability.Description)).Select(x => x.Resource).Distinct().ToList();
    

    在这里,您从列表中选择所有包含功能的 ResourceCapability 实体,然后从这些 ResourceCapability 项目中选择不同的资源。

    【讨论】:

    • 感谢@codefuller。这完美地工作。我正在寻找一种以某种方式使用连接表直接从资源中获取功能的方法。但这似乎是不可能的,我必须查询加入表以获取双方的列表。
    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多