使用逗号分隔的字符串搜索List

时间:2014-08-02 15:47:47

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

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:applicantID 1的FacultyList = 1,2,30,4,... 100 / applicantID 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();
    }
}

2 个答案:

答案 0 :(得分:4)

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

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

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

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

UPDATE2

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

答案 1 :(得分:0)

您不需要foreach循环:

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