Linq содержит проблему функции - PullRequest
0 голосов
/ 04 декабря 2009

Я использую Ria Service domainservice для запроса данных.

В моей базе данных есть таблица Люди с именем, фамилией. Затем я использую сервисы EF / RIA для обработки данных.

Затем я создаю Фильтр ViewModel для захвата пользовательских входных данных, на основе этого ввода я создаю запрос Linq для доступа к данным.

На стороне сервера запрос DomainService для человека по умолчанию:

 public IQueryable<Person> GetPerson()
   {
     return this.Context.Person;
   }

На стороне клиента запрос linq для фильтра выглядит примерно так (я использую здесь функцию Contains):

if (!String.IsNullOrEmpty(this.LastName))
    q = q.Where(p => (p.LastName.Contains(this.LastName)));

Сгенерированный запрос linq выглядит примерно так (при отладке я его получил):

MyData.Person[].Where(p => (p.LastName.Contains(value(MyViewModel.PersonFilterVM).LastName) || p.Person.LegalLastName.Contains(value(MyViewModel.PersonFilterVM).LastName)))

Когда я запускаю приложение, я ставлю «Смит» для фамилии для поиска, но результат совершенно не имеет значения для «Смита»!

Как это исправить?

Ответы [ 2 ]

1 голос
/ 05 декабря 2009

Я предполагаю, что ваша ошибка такова, что это может не сработать для вас.

В вашем втором фрагменте кода вы делаете следующее.

q = q.Where(p => (p.LastName.Contains(this.LastName)));

Здесь я думаю, что ваша ошибка. Linq не оценивает предложение where, пока вы не выполните итерацию. Попробуйте изменить строку на следующую.

qWithData = q.Where(p => (p.LastName.Contains(this.LastName))).ToList();

Вызов .ToList () загрузит запрос с данными.

0 голосов
/ 06 декабря 2009

Когда вы регистрируетесь в отладчике, оценивает ли value(MyViewModel.PersonFilterVM).LastName Смита в момент разрешения запроса?

Напомним, что запросы не разрешаются до тех пор, пока они не будут перечислены.

...