【问题标题】:SearchString search operation with forename and surnameSearchString 搜索操作的名字和姓氏
【发布时间】:2021-07-14 15:13:50
【问题描述】:

您好,我有一个搜索框,它接受搜索字符串并在数据库中搜索它。帐户名称 Utsav Pal 的输入类似于“utsav pal”、“utsav p”、“pal”。但我只想使用像“uts pa”这样的首字母。谁能建议我该怎么做?

这是我使用的逻辑

if(!String.IsNullOrEmpty(vm.SearchString)){
 accounts = accounts.where( a => 
       ((a.Forname != null) && (a.Forename +"  "+ a.Surname).IndexOf(vm.SearchString, StringComparison.CurrentCultureIgnoreCase) >= 0 ) ||
      ((a.AccountCode != null) && a.AccountCode.IndexOf(vm.SearchString, StringComparison.CurrentCultureIgnoreCase) >= 0 )

【问题讨论】:

  • “但我只想使用首字母” 我的这个是什么意思?名为“utsav pal”的人的首字母是“u”和“p”,而不是“uts pa”·
  • 你可以先测试Forename + " " + Surname是否包含输入。如果 return 为 null,则在空格之前和之后拆分输入。拆分测试后,分别使用 Forename 和 Surname 分隔输入。
  • 嗨,Marko Ivkovic,你能举个例子吗?
  • 我的逻辑步骤是: 1.(a.Forename +" "+ a.Surname).IndexOf(vm.SearchString) 2.strings = vm.SearchString.Split(" ") foreach (string singleString in strings) a.Forename.IndexOf(singleString) 3.strings = vm.SearchString.Split(" ") foreach (string singleString in strings) a.Surname.IndexOf(singleString) 下一步只有在前一个返回null的情况下才会执行。注意:我不懂 C#,所以语法可能不是 100% 正确
  • 嗨,Marko,我已经尝试过你的逻辑,但没有成功!!!

标签: c# .net tsql


【解决方案1】:

您可以使用以下逻辑。我已经为基于 Person 模型的数据创建了一个 Person 模型类和一个存储库类。 第一个代码 sn-p 是 Person Model 和 Repository Classes。

public class Person
        {
            public int Id { get; set; }
            public string ForeName { get; set; }
            public string SurName { get; set; }
            public string Email { get; set; }
        }

        public static class Repository
        {
            public static List<Person> p { get; set; }
            static Repository()
            {
                p = new List<Person>();
                p.Add(new Person
                {
                    Id = 1,
                    ForeName = "Nafi",
                    SurName = "Ahmadi",
                    Email = "Nafi@example.com"
                });
                p.Add(new Person
                {
                    Id = 1,
                    ForeName = "Shafiq",
                    SurName = "Rahman",
                    Email = "Shafiq@example.com"
                });
                p.Add(new Person
                {
                    Id = 1,
                    ForeName = "Wali",
                    SurName = "Mohammad",
                    Email = "Wali@example.com"
                });
            }
        }  

这是使用首字母在存储库数据中搜索的逻辑。

static void Main(string[] args)
        {
            // Data set
            List<Person> a = Repository.p;

            // Search string
            string SearchStringInput = "N A";

            // Split search string
            string[] SearchString = SearchStringInput.Split(" "); 
            
            if (!String.IsNullOrEmpty(SearchStringInput))
            {
                var p = a.Where(x =>
                ((x.ForeName != null)) && ((x.ForeName.ElementAt(0).ToString() == SearchString[0].ToString()) || x.ForeName.ToString() == SearchString[0].ToString()) && (x.SurName.ElementAt(0).ToString() == (SearchString[1].ToString())) || (x.SurName.ToString() == (SearchString[1].ToString())));

                foreach (var item in p)
                {
                    Console.WriteLine(item.Email);
                }
            }

            Console.ReadKey();
        }

【讨论】:

  • 嗨,Naveed 感谢您现在回答我可以使用首字母搜索帐户,但如果我像这样搜索 Utsav Pal 的“U Pal”,仍然不可能
  • @UtsavPal 我已经更新了我的答案。现在它适用于首字母和全词搜索。
  • @UtsavPal 如果这对您有帮助,请接受它作为已回答的问题。并点赞。
  • 您的代码非常适合我,但现在它也显示带有空白记录的代码,就像在我的数据库中有一些没有名字和姓氏的记录。因此,当我为 SUSAN BAILEY 搜索其他名称(例如“SUS”)时。它显示了两条记录 1. SUSAN BAILEY 和 2.(空白)
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多