Задать вопрос
Slider_vm
@Slider_vm

Почему Entity Framework создает не правильный запрос?

Добрый день!

Есть сущность
public partial class countries
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public countries()
        {
            this.people = new HashSet<people>();
        }
    
        public int id { get; set; }
        public string full_name { get; set; }
        public string name { get; set; }
        public string full_name_eng { get; set; }
        public string name_eng { get; set; }
        public string iso_num { get; set; }
        public string iso2 { get; set; }
        public string iso3 { get; set; }
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<people> people { get; set; }
    }


В репозитории сделал метод
public countries FindFirst(Func<countries, bool> predicate)
        {
            return db.countries.FirstOrDefault(predicate);
        }


Вызываю метод из кода
public bool CountryExist(int iso)
        {
            var result = db.Countries.FindFirst(c=>c.iso_num == iso.ToString());
            return result != null ? true : false;
        }


Почему EF создает запрос без наложения условия WHERE?
SELECT * FROM countries
  • Вопрос задан
  • 229 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 1
lasalas
@lasalas
.NET Architect
Почитай про разницу между IEnumerable<> и IQuerable<>
public countries FindFirst(Expression<Func<countries, bool>> predicate)
{
...      
}


CountryExist() оптимальнее переписать так:
public bool CountryExist(int iso)
{
    var isoNum = iso.ToString();
    return db.Countries.Any(c=>c.iso_num == isoNum);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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