在Silverlight c#中搜索名称识别

本文关键字:识别 搜索 Silverlight | 更新日期: 2023-09-27 18:24:57

我有一个使用Prism实践的silverlight应用程序;当前代码按名字、姓氏或性别进行搜索。关于名称,我想将代码更改为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;
        }
    }
}

在Silverlight c#中搜索名称识别

如果我正确阅读了您的需求和示例代码,只需在测试中添加一个长度检查即可:

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