2012-02-15 29 views
2

我有一個使用Prism實踐的Silverlight應用程序;當前的代碼通過名字或姓氏或性別進行搜索。管理名稱,我想將代碼更改爲3個字符,因爲現在只要找到一個字符就會搜索名稱,這樣您就可以看到問題了,我可以在這裏調整代碼以僅選擇那些3個字符匹配?讓我們留下小於3的名字的問題,但是我們可以允許那裏的任何東西。在Silverlight c#中用於名稱識別的搜索

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

如果我正確地讀出你的要求和示例代碼,只需添加一個長度檢查,你的測試應該工作:

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

那會是一個問題呢。除非我們可以說,如果姓氏已超過2,則搜索3。否則,執行舊搜索。 – 2012-02-15 20:57:39

+0

@PinchasK - 這會工作。我會更新答案 – ChrisF 2012-02-15 20:58:42