@TeVeTed

Как работать со связью много-ко-многим в контроллере?

Я в контроллере оперирую со связями один-ко-многим, оно все однотипно
public ViewResult List(string region,
                               string area,
                               string localityType,
                               string speciality,
                               int page = 1)
        {
            CollegeListViewModel model = new CollegeListViewModel
            {
                Colleges = repository.Colleges
                .Where(p => region == null || p.Area.Region.Name == region)
                .Where(p => localityType == null || p.LocalityType.Name == localityType)
                .Where(p => area == null || p.Area.Name == area)
                .OrderBy(college => college.CollegeId)
                .Skip((page - 1) * pageSize)
                .Take(pageSize),
                PagingInfo = new PagingInfo
                {
                    CurrentPage = page,
                    ItemsPerPage = pageSize,
                    TotalItems = ((region == null) && (localityType == null)) ?
                repository.Colleges.Count() :
                repository.Colleges.Where(college => college.Area.Region.Name == region)
                                   .Where(college => college.Area.Name == area)
                                   .Where(college => college.LocalityType.Name == localityType).Count()
                },
                CurrentRegion = region,
                CurrentArea = area,
                CurrentLocalityType = localityType,
            };
            return View(model);
        }

Во всех .Where(...) сравниваются string и string, а мне нужно добавить еще один .Where(...), где будут сравниваться элемент List и string speciality.
Помогите пожалуйста
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ответы на вопрос 1
andrewpianykh
@andrewpianykh
Как строка может сравниваться со списком строк?

Используйте методы Contains и Count чтобы проверить наличие строки в списке.

var list = new List<string>() { "one", "two", "three", "four" };
var expected = "two";
var result = list.Contains(expected);
// либо
result = list.Count(a => a == expected) > 0;


В Вашем случае, например так:

var regions = new List<string>() { "region 1", "region 2", "region 3", "region 4" };
repository.Colleges.Where(college => regions.Count(a =>  a == college.Area.Region.Name) > 0);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы