如果提供的搜索字串從我的資料庫的“FirstName”和“LastName”列中產生資料,我有這個查詢,我想在其中回傳結果。他們每個人都單獨作業,因為我可以獲得 Firstname = 'john' 和 LastName = 'doe' 的結果。我還希望能夠傳入“John doe”的搜索字串并獲得結果。我將如何使用 .net/linq 來實作它
片段: var query = _context.Players.Where(p => p.Firstname.Contains(searchString.ToLower().Trim()) || p.Lastname.Contains(searchString.ToLower().Trim()));
uj5u.com熱心網友回復:
使用Split如下函式:
var parts = searchString.Split();
snippet: var query = _context.Players.Where(
p => p.Firstname.Contains(parts[0].ToLower().Trim())
|| p.Lastname.Contains(parts[1].ToLower().Trim()));
摘自官方檔案:
如果 separator 引數為 null 或不包含任何字符,則假定空白字符為分隔符。
uj5u.com熱心網友回復:
分離輸入資料也很方便
var parts = searchString.Split();
var partOne = parts[0].ToLower().Trim();
var partTwo = parts[1].ToLower().Trim()
var query = _context.Players.Where(
p => p.Firstname.Contains(partOne)
|| p.Lastname.Contains(partTwo));
uj5u.com熱心網友回復:
創建了一個擴展方法類來隔離搜索演算法的功能部分。這是基于模式匹配演算法。你可以試試這個一次。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
static class Extensions
{
public static void Sanitize(this string item)
{
Regex rgx = new Regex("[^a-AA-Z0-9 -]");
item = rgx.Replace(item, " ");
}
public static string GetPipedString(this string item)
{
StringBuilder builder = new StringBuilder();
item.Split(' ').ToList().ForEach(x => builder.Append('|').Append(x));
builder.Remove(0, 1);
return builder.ToString();
}
public static IEnumerable<Person> FindPlayers(this IEnumerable<Person> persons, string searchKey)
{
searchKey.Sanitize();
string pattern = string.Format(@"^?:{0}\w*$", searchKey.GetPipedString());
return persons.Where(x => Regex.IsMatch(
string.Join(string.Empty,
new List<string>() { x.FirstName, x.LastName }),
pattern,
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace));
}
}
class Program
{
static void Main(string[] args)
{
/* Assuming peoples is the IEnumerable<Person>.
Anyways there is an explicit sanitization of the string to remove the non alphanum characters*/
var items = peoples.FindPlayers("ANY DATA SPACE SEPARATED").ToList();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/428912.html
上一篇:檢查強制陣列的串列元素部分
