我有一个通用列表,需要根据其他列表进行过滤(例如List<string>
)。
public class Model
{
public string ID { get; set;}
public string Make { get; set;}
}
List<Model> lstModel = new List<Model>();
lstModel如下
ID Make
---- -----------
5 MARUTI
4 BENZ
3 HYUNDAI
2 HONDA
1 TOYOTA
我有另一个列表,其中只包含汽车制造商,即
List<string> lstMakers = new List<string>() {"MARUTI", "HONDA"};
1)我需要过滤lstModel,它只包含lstMakers中的项目。 输出将是
ID Make
---- -----------
5 MARUTI
2 HONDA
2)基于输出(1),需要另一个id列表,每个项目按降序递增1次,
输出将是List<int>
,即
6
5
3
2
注意:更优选使用lambda表达式/ linq
答案 0 :(得分:2)
1)
var list1 = lst.Where(x=>lstMakers.Contains(x.Make)).ToList();
2)
var list2 = list1.Select(x=>int.Parse(x.ID)+1)
.Concat(list1.Select(x=>int.Parse(x))
.OrderByDescending(x=>x)
.ToList();
答案 1 :(得分:2)
使用Enumerable.Join
和OrderByDescending
:
var models = from maker in lstMakers
join model in lstModel
on maker equals model.Make
select model;
List<int> result = models
.Select(m => int.Parse(m.ID) + 1)
.OrderByDescending(i => i)
.ToList();
但是,这会选择两个ints
,因为只有两个模型匹配。您的结果包含4个ints
。我假设你的结果与你的样本无关,是吗?
但我需要项目及其增量值,......
现在很明显,将Enumerable.SelectMany
与数组一起使用:
List<int> result = models
.Select(m => int.Parse(m.ID))
.SelectMany(id => new int[]{ id, id + 1 })
.OrderByDescending(id => id)
.Distinct()
.ToList();