【问题标题】:search through a List with a Comma separated string使用逗号分隔的字符串搜索列表
【发布时间】:2014-08-02 15:47:47
【问题描述】:
I have a comma separated string FacultyList="1,2,3,4...1004,1005..."

然后是“InitialApplicantModel”类型的申请人列表。 FacultyList 是 InitialApplicantModel 的属性。

public class InitialApplicantModel
{
  public int applicantID {get;set}
  public string FacultyList {get; set;}
}

我想获取一个申请者列表,其中他们的 FacultyList 包含值 4。

EX:申请人 ID 1 具有 FacultyList=1,2,30,4,..100 /申请人 ID 2 具有 FacultyList=200,301,.... / 申请人 3 有 FacultyList=101,2,31,4,..110

所以最终名单应该返回申请人 1 和 3。

我尝试了下面的代码,但似乎没有返回正确的结果。

foreach (InitialApplicantModel item in applicants)
{
    if (item.FacultyList != null)
    {
        string[] array = item.FacultyList.Split(',');
        array = array.Where(x => !string.IsNullOrEmpty(x)).ToArray();
        applicants = applicants.AsEnumerable().Where(o => array.Any(b =>(b)== "4")).ToList();
    }
}

【问题讨论】:

  • 您的代码没有任何意义,您甚至从未在 where 调用中检查应用程序 (o)。

标签: c# asp.net asp.net-mvc linq lambda


【解决方案1】:

您只需要Where() 方法即可根据需要过滤数据。这些方法接受匿名方法作为输入。这些方法必须返回布尔值。在这个方法中,你必须将值除以',',然后搜索返回的数组是否包含4

var result = applicants
             .Where(x => x.FacultyList.Split(',').Contains("4"))
             .ToList();

更新1: 如果字符串为空,.Split() 将抛出 NullReferenceException

var result = applicants
             .Where(x => !String.IsNullOrEmpty(x.FacultyList) ?     
                          x.FacultyList.Split(',').Contains("4") : false)
             .ToList();

更新2

var result = applicants
             .Where(x => !String.IsNullOrEmpty(x.FacultyList) ?     
                          x.FacultyList.Split(',').Equals("4") : false)
             .ToList();

【讨论】:

  • 你能选择一个你想保留的答案,然后删除另一个吗?
  • @FarhadJabiyev 首先我需要检查 FacultyList 是否为空。有没有办法在不使用 foreach 循环的情况下检查它?
  • @chamara 很高兴为您提供帮助。
  • @FarhadJabiyev 如果数组项有 44,104 之类的项怎么办 .. contains 也会将它们视为有效项,对吗?但我需要该项目与“4”完全匹配
  • @chamara 在你所说的问题中,包含 4。所以,我已经这样回答了。但是,如果您想检查字符串是否等于 4,请查看我的新更新。
【解决方案2】:

您不需要foreach 循环:

applicants = applicants
            .AsEnumerable()
            .Where(o => o.FacultyList.Split(',').Contains("4")).ToList();

【讨论】:

  • 首先我需要检查 FacultyList 是否为空。有没有办法在不使用 foreach 循环的情况下检查它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2013-07-03
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多