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();
}
}
答案 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();