2009-12-04 1 views
0

Я использую службу доменов Ria Service для запроса данных.Linq Containsfunction problem

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

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

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

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

На стороне клиента запросов LINQ для фильтра что-то вроде (я использую Содержит функции здесь):

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))) 

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

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

ответ

1

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

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

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

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

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

Звонок .ToList() будет загружать запрос данными.

0

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

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