Как избежать написания операторов Where () в LINQ? - PullRequest
0 голосов
/ 25 августа 2011

Я работаю с LINQ и EF впервые.Я разработал базу данных, которая связывает сущность Developer с сущностью SkillProfile через сущность «многие ко многим» с именем «DeveloperMatchesProfile».

Проблема, с которой я сталкиваюсь, заключается в том, что мой запрос LINQ (который зависит от использования навигационного свойства вне исходной переменной диапазона) нуждался в дополнительном предложении Where.Похоже, что это может быстро стать неэффективным.Есть ли способ лучше?Представляет ли эта конструкция угрозу производительности?

My Entities

My Query

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Почему бы не сделать что-то подобное?

 var skills = _Context.DeveloperMatchesProfiles
      .Where(x => x.DeveloperId == developerId)
      .Select(x => x.SkillProfile);

Вы просто выбираете экземпляры DeveloperMatchProfiles с этим идентификатором разработчика и выбираете связанное свойство навигации.Ты в основном возвращаешься назад, если я правильно понимаю твои отношения.

2 голосов
/ 25 августа 2011

Представляет ли эта конструкция угрозу для производительности?

Невозможно узнать, что без получения фактического сгенерированного sql и просмотра плана выполнения, времени выполнения и ввода-вывода.

Есть ли лучший способ?

Могу ли я порекомендовать использовать .Any() сверх .Count() при проверке на существование?

 _Context.SkillProfiles.Where(
  p => p.DeveloperMatchesProfiles.Any(d => d.DeveloperId == developerId)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...