如何首先使用 EF 代码编写 Linq 查询 多对多关系
how to write a Linq query with a EF code first Many to Many relationship
我首先使用 EF 代码,我在其中创建了 Provider
和 Department
之间的多对多关系。
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 table 不是 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' 开头。
--------------------------
| LastName | Name |
--------------------------
| Selfa | ER |
| Erickson | Radiology|
--------------------------
如有任何帮助,我们将不胜感激。
在这种情况下,您似乎正确地实现了 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;
我首先使用 EF 代码,我在其中创建了 Provider
和 Department
之间的多对多关系。
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 table 不是 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' 开头。
--------------------------
| LastName | Name |
--------------------------
| Selfa | ER |
| Erickson | Radiology|
--------------------------
如有任何帮助,我们将不胜感激。
在这种情况下,您似乎正确地实现了 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;