【问题标题】:how to write a Linq query with a EF code first Many to Many relationship如何首先使用 EF 代码编写 Linq 查询 多对多关系
【发布时间】:2015-03-24 00:25:19
【问题描述】:

我首先使用 EF 代码,我在其中创建了 ProviderDepartment 之间的多对多关系。

public class Provider
{
    public int Id { get; set; }

    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<Department> Departments { get; set; }
}

public class Department
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Provider> Providers { get; set; }
}

modelBuilder.Entity<Provider>()
.HasMany(p => p.Departments)
.WithMany(d => d.Providers)
.Map(m =>
{
    m.MapLeftKey("ProviderId");
    m.MapRightKey("DepartmentId");
    m.ToTable("ProviderDepartment");
});

我正在尝试编写与以下 SQL 查询等效的 linq 查询,但 ProviderDepartment 表不是 DbContext 的一部分。

select p.LastName, d.Name
from Provider p
join ProviderDepartment pd on p.Id = pd.ProviderId
join Department d on pd.ProviderId = d.Id
where d.Name like 'er%'
or p.LastName like 'er%'

结果应该是 Provider.LastName 或 Department.Name 以“er”开头的 Provider 和 Department。

--------------------------
| LastName   |  Name     |
--------------------------
| Selfa      |  ER       |
| Erickson   |  Radiology|
--------------------------

任何帮助将不胜感激。

【问题讨论】:

    标签: c# sql linq entity-framework ef-code-first


    【解决方案1】:

    在这种情况下,您似乎正确地实现了many-to-many 关联。因此,对于 Linq,您不需要 join 也可以将 StartsWith 用于 'er%'

    var query = from p in DbContext.Provider
                from d in p.Departmennt
                where p.Lastname.StartsWith("er") && d.Name.StartsWith("er")
                select p.LastName,d.Name;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-08
      • 2012-11-16
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多