как написать запрос Linq с кодом EF сначала отношение «многие ко многим»

1

Сначала я использую 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");
});

Я пытаюсь написать запрос linq, который будет эквивалентен ниже SQL-запросу, но таблица 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'.

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

Любая помощь будет оценена по достоинству.

Теги:
linq
entity-framework
ef-code-first

1 ответ

2
Лучший ответ

в этом случае, по-видимому, вы правильно применили ассоциацию " 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;
  • 0
    Спасибо! Это прекрасно работает.
  • 0
    Добро пожаловать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню