using System.Collections.Generic;
public object Response { get; set; }
public string ErrorInfo { get; set; }
public string Faretype { get; set; }
public string ServiceProvider { get; set; }
public static void Main()
List<DataItem> data = new List<DataItem>
new DataItem { Response = "fares1", ErrorInfo = null, Faretype = "STO", ServiceProvider = "AMADS" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "STO", ServiceProvider = "AMADS" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "ITR", ServiceProvider = "AMADS" },
new DataItem { Response = "fares2", ErrorInfo = null, Faretype = "ITR", ServiceProvider = "AMADS" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "ITR", ServiceProvider = "AMADS" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "PB", ServiceProvider = "AMADS" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "PB", ServiceProvider = "AMADS" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "PB", ServiceProvider = "NDCABA" },
new DataItem { Response = null, ErrorInfo = "not null", Faretype = "PB", ServiceProvider = "NDCABA" },
.GroupBy(x => new { x.ServiceProvider, x.Faretype })
.SelectMany(group => group
.Where(item => item.Response != null || group.All(x => x.Response == null)))
.Select(item => new { item.Response, item.Faretype, item.ServiceProvider })
foreach (var item in result)
Console.WriteLine("response: "+item.Response+", Faretype: "+item.Faretype+", ServiceProvider: "+item.ServiceProvider);