Поиск в Silverlight c # для распознавания имени - PullRequest
2 голосов
/ 16 февраля 2012

У меня есть приложение silverlight, использующее практики Prism; текущий код выполняет поиск по имени, фамилии или полу. Что касается имен, я хотел бы изменить код, например, на 3 символа, потому что теперь он ищет, пока найден один символ, имя будет отображаться, чтобы вы могли увидеть проблему, могу ли я настроить код здесь, чтобы выбрать только те, соответствие 3 символов? давайте оставим в покое вопрос имени менее 3, но тогда мы можем разрешить что угодно.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PBM.Web.Classes
{
    public class Search
    {
        public static IQueryable<Patient> GetSearchQueryPatient(IQueryable<Patient> pSearchQuery, Patient pPatient)
        {
            if (!string.IsNullOrEmpty(pPatient.FirstName))
            {
                pSearchQuery = pSearchQuery.Where(item => item.FirstName.Contains(pPatient.FirstName));
            }

            if (!string.IsNullOrEmpty(pPatient.LastName))
            {
                pSearchQuery = pSearchQuery.Where(item => item.LastName.Contains(pPatient.LastName));
            }

            if (pPatient.Gender.HasValue && pPatient.Gender.Value > 0)
            {
                pSearchQuery = pSearchQuery.Where(item => item.Gender.Value == pPatient.Gender.Value);
            }

            pSearchQuery = pSearchQuery.OrderBy(item => item.FirstName).ThenBy(item => item.LastName);

            return pSearchQuery;
        }
    }
}

1 Ответ

1 голос
/ 16 февраля 2012

Если я правильно прочитал ваше требование и пример кода, просто добавьте проверку длины в ваши тесты:

if (!string.IsNullOrEmpty(pPatient.FirstName) && pPatient.FirstName.Length > 2)
{
    pSearchQuery = pSearchQuery.Where(item => item.FirstName.Contains(pPatient.FirstName));
}

Это значит, что если имя меньше 3 символов, оно выиграет 'не совпадает, так что вы хотите, чтобы затем проверить, если этот поиск дал что-нибудь, а если нет, то выполнить простой поиск любой длины:

if (!string.IsNullOrEmpty(pPatient.FirstName))
{
    // First look for a 3 or more character match
    if (pPatient.FirstName.Length > 2)
    {
        pSearchQuery = pSearchQuery.Where(item => item.FirstName.Contains(pPatient.FirstName));
    }
    // If didn't find anything do the simple search
    if (!pSearchQuery.Any())
    {
        pSearchQuery = pSearchQuery.Where(item => item.FirstName.Contains(pPatient.FirstName));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...