我有一个使用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;
}
}
}
答案 0 :(得分:1)
如果我已正确阅读您的要求和示例代码,只需在您的测试中添加长度检查即可:
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));
}
}