2

Я использую 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, я всегда получаю все результаты. Я просто не могу понять, куда я ускользаю.

ответ

1

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

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

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

Там мы идем! Спасибо. – paulpitchford

Смежные вопросы