Linq для алгоритма поиска объектов - PullRequest
0 голосов
/ 19 августа 2011

Я реализую поиск, который будет принимать шесть возможных (но не обязательных) пользовательских данных, а затем попытаюсь сопоставить их с некоторыми объектами.

Я думаю, что проблема, с которой я столкнулся, заключается в том, что EF и SQL Server считают нули как две совершенно разные вещи.

Идея: выберите сущность, в которой columnA = (если columnA равно нулю, а columnA (или равно нулю), иначе searchTerm). Поисковые термины представляют собой сочетание целых и строк.

Некий код:

entities= (from c in context.Entities
           where c.ColumnA == (searchTermA ?? v.ColumnA)
           where c.ColumnB == (searchTermB ?? v.ColumnB)
           select new
           {
               v.Property,
           }).ToList();

Если все столбцы не содержат пустых значений, объекты возвращаются. Тем не менее, я не получаю ожидаемых результатов, если столбец имеет нулевые значения.

Как я могу обойти это?

Richard

Ответы [ 3 ]

0 голосов
/ 19 августа 2011

Это то, что я использовал для обработки нулевых значений. Это был единственный способ получить правильные результаты.

((searchTermA.HasValue) ? (c.ColumnA == searchTermA) : true)
0 голосов
/ 19 августа 2011

Самый простой способ:

var query = from c in context.Entities;

if  (searchTermA != null) {
    query = query.Where(c => c.ColumnA == searchTermA);
}

// Rest of your conditions defined in the same way.

var entities = query.Select(c => new { c.Property }).ToList();
0 голосов
/ 19 августа 2011

Пусть функция принимает значение Predicate<T> и выполняет построение фильтра на стороне пользовательского интерфейса.

См: http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...