public Class Car
{
public string Name {get;set;}
public string Color {get;set;}
}
Car1 = new {"Ford", "White"}
Car2 = new {"Ford Fiesta", "Blue"}
Car3 = new {"Honda City", "Yellow"}
Car4 = new {"Honda", "White"}
var carObj = new List<Car>();
carObj.Add(Car1);
carObj.Add(Car2);
carObj.Add(Car3);
carObj.Add(Car4);
我需要根据汽车名称过滤输出,这样如果名称是任何名称的子集,它将删除它们。
输出:
Car2 = new {"Ford Fiesta", "Blue"}
Car3 = new {"Honda City", "Yellow"}
以下是我要写的内容,但它没有给我所需的输出。
// Remove duplicare records.
var carObjNEW = new List<Car>();
carObjNEW = carObj;
carObj.RemoveAll(a => carObjNEW.Any(b => a.Name.Contains(b.Name)));
有关如何解决此问题的任何帮助。
答案 0 :(得分:0)
您无需使用两个列表。就这样说:
carObj.RemoveAll(a =>
carObj.Any(b => b.Name.Contains(a.Name) && b.Name.Length > a.Name.Length));
答案 1 :(得分:0)
正如我在评论中指出的那样,你有一个简单的错误。如果list包含另一个包含第一个项目的项目作为子字符串,则需要删除项目:
carObj.RemoveAll(a => carObj.Any(b => b.Name.ToLower().Contains(a.Name.ToLower()) && b.Name.Length > a.Name.Length));
如果您想按StringComparison
进行比较,只需将Contains
交换为IndexOf(String value, StringComparison comparisonType) > 0
答案 2 :(得分:0)
投影然后过滤
carObj.Select(c => new { c, Match = carObj.Any(cc => cc.Name != c.Name && cc.Name.Contains(c.Name))}).Where(n => !n.Match)