using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var fooList = new List<Foo>()
{
new Foo(){First = "a1", Second="b1", Third="c1", Fourth="v1"},
new Foo(){First = "a1", Second="b1", Third="c1", Fourth="v2"},
new Foo(){First = "a1", Second="b1", Third="c2", Fourth="v4"},
new Foo(){First = "a1", Second="b1", Third="c3", Fourth="v3"},
new Foo(){First = "a1", Second="b1", Third="c3", Fourth="v4"}
};
var searchText = "v4";
var filteredFooList = fooList.GroupBy(foo => foo.Third)
.Where(groupedFoo => groupedFoo.Any(foo => foo.Fourth == searchText))
.SelectMany(groupedFoo => groupedFoo).ToList();
foreach (var item in filteredFooList)
{
Console.WriteLine($"{item.First} {item.Second} {item.Third} {item.Fourth}");
}
}
public class Foo
{
public string First { get; set; }
public string Second { get; set; }
public string Third { get; set; }
public string Fourth { get; set; }
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIGZvb0xpc3QgPSBuZXcgTGlzdDxGb28+KCkKCQl7CgkJCW5ldyBGb28oKXtGaXJzdCA9ICJhMSIsIFNlY29uZD0iYjEiLCBUaGlyZD0iYzEiLCBGb3VydGg9InYxIn0sCgkJCW5ldyBGb28oKXtGaXJzdCA9ICJhMSIsIFNlY29uZD0iYjEiLCBUaGlyZD0iYzEiLCBGb3VydGg9InYyIn0sCgkJCW5ldyBGb28oKXtGaXJzdCA9ICJhMSIsIFNlY29uZD0iYjEiLCBUaGlyZD0iYzIiLCBGb3VydGg9InY0In0sCgkJCW5ldyBGb28oKXtGaXJzdCA9ICJhMSIsIFNlY29uZD0iYjEiLCBUaGlyZD0iYzMiLCBGb3VydGg9InYzIn0sCgkJCW5ldyBGb28oKXtGaXJzdCA9ICJhMSIsIFNlY29uZD0iYjEiLCBUaGlyZD0iYzMiLCBGb3VydGg9InY0In0KCQl9OwoJCQoJCXZhciBzZWFyY2hUZXh0ID0gInY0IjsKCQkKCQl2YXIgZmlsdGVyZWRGb29MaXN0ID0gZm9vTGlzdC5Hcm91cEJ5KGZvbyA9PiBmb28uVGhpcmQpCgkJCS5XaGVyZShncm91cGVkRm9vID0+IGdyb3VwZWRGb28uQW55KGZvbyA9PiBmb28uRm91cnRoID09IHNlYXJjaFRleHQpKQoJCQkuU2VsZWN0TWFueShncm91cGVkRm9vID0+IGdyb3VwZWRGb28pLlRvTGlzdCgpOwoJCQoJCWZvcmVhY2ggKHZhciBpdGVtIGluIGZpbHRlcmVkRm9vTGlzdCkKCQl7CgkJCUNvbnNvbGUuV3JpdGVMaW5lKCQie2l0ZW0uRmlyc3R9IHtpdGVtLlNlY29uZH0ge2l0ZW0uVGhpcmR9IHtpdGVtLkZvdXJ0aH0iKTsKCQl9Cgl9CgkKCXB1YmxpYyBjbGFzcyBGb28KCXsKCQlwdWJsaWMgc3RyaW5nIEZpcnN0IHsgZ2V0OyBzZXQ7IH0KCQlwdWJsaWMgc3RyaW5nIFNlY29uZCB7IGdldDsgc2V0OyB9CgkJcHVibGljIHN0cmluZyBUaGlyZCB7IGdldDsgc2V0OyB9CgkJcHVibGljIHN0cmluZyBGb3VydGggeyBnZXQ7IHNldDsgfQoJfQp9