我有一个问题:我有两个数组值,一个是自定义类对象,它具有变量分类代码,另一个是该分类类型的值数组。我需要检查值是否存在于分类代码数组和组合结果,使一个结果。值可以是多个或单个,基于此我需要将它们放入contains过滤器。
例如,目前对于单个值,代码为。
private List<Result> FilterbyClassification(List<Result> results)
{
var classificationCodes = "C, R".Split(",").ToList();
return results.Where(f => classificationCodes.All(f.ClassificationCode.Contains)).ToList();
}
它现在没有给我任何值。你能帮帮我吗
您需要检查的几件事:
- 删除
classificationCodes
声明中的空白
var classificationCodes = "C,R".Split(",").ToList();
- 更改您的Linq使用
Any
而不是All
,并使用分类代码的比较。这应该会给你结果:
// items:
var items = new List<Result>
{
new Result { ClassificationCode = "C", Id = 1},
new Result { ClassificationCode = "C", Id = 2},
new Result { ClassificationCode = "R", Id = 3},
new Result { ClassificationCode = "A", Id = 4}
};
var classificationCodes = "C,R".Split(",").ToList();
var data = items.Where(x => classificationCodes.Any(y => y == x.ClassificationCode)).ToList();
Console.WriteLine(JsonSerializer.Serialize(data));
// Output
[{"Id":1,"ClassificationCode":"C"},{"Id":2,"ClassificationCode":"C"},{"Id":3,"ClassificationCode":"R"}]
或者,您也可以创建一个linq连接:
var data = from i in items
join cc in classificationCodes on i.ClassificationCode equals cc
select new Result {ClassificationCode = i.ClassificationCode, Id = i.Id};
或
var data = items.Join(classificationCodes, i => i.ClassificationCode, cc => cc,
(i, cc) => new Result {ClassificationCode = i.ClassificationCode, Id = i.Id});