Почему этот запрос всегда возвращает ВСЕ записи?

Я использую WCF RIA в проекте Lightswitch для создания некоторых результатов запроса. Этот запрос возвращает все результаты независимо. Я не могу заставить его фильтровать записи на основе переданного параметра (string Town).

public IQueryable<Enquiries> TestQuery(string Town)
        {
            List<Enquiries> riaenqs = new List<Enquiries>();
            var enqs = this.Context.ClientEnquiries
                .Include("Client")
                .Include("Client.Town")
                .OrderBy(enq => enq.Id);

            if (Town != null)
            {
                enqs.Where(enq => enq.Client.Town.TownName == Town);
            }

            foreach (ClientEnquiry item in enqs.ToList())
            {
                Enquiries enq = new Enquiries();
                enq.Id = item.Id;
                enq.ClientName = item.Client.FirstName + " " + item.Client.Surname;
                enq.Town = item.Client.Town != null ? item.Client.Town.TownName : null;

                riaenqs.Add(enq);
            }

            return riaenqs.AsQueryable();
        }

Во время отладки я вижу, что город заполнен правильно, и я вижу, что запрос построен соответствующим образом, если Town не null. Однако, когда я нажимаю оператор foreach, в котором выполняется запрос linq to ef, я всегда получаю все результаты. Я просто не могу понять, где я ошибаюсь.


person paulpitchford    schedule 17.05.2015    source источник


Ответы (1)


Методы LINQ, такие как Where, не изменяют коллекцию/выражение, а всегда возвращают новый.

Поэтому вам нужно переназначить результат Where исходной переменной enqs:

if (Town != null)
{
    enqs = enqs.Where(enq => enq.Client.Town.TownName == Town);
}
person nemesv    schedule 17.05.2015
comment
Ну вот! Спасибо. - person paulpitchford; 17.05.2015