I have 2 lists with below structure.
public class Team
{
public string Id { get; set; }
public Driver Driver { get; set; }
public Driver Codriver { get; set; }
}
public class Driver
{
public string DriverId { get; set; }
}
var modifiedTeams = new List<Team>
{
new Team {Id = "T1", Driver = new Driver { DriverId = "D2" }, Codriver = new Driver { DriverId = "C1"} },
new Team {Id = "T2", Driver = new Driver { DriverId = "D1"} }
};
var allTeams = new List<Team>
{
new Team {Id = "T1", Driver = new Driver { DriverId = "D1" }, Codriver = new Driver { DriverId = "C1"} },
new Team {Id = "T2", Driver = new Driver { DriverId = "D2"}, Codriver = new Driver { DriverId = "C2"} }
};
I want to get all the Id's of driver and codriver from modifiedTeams but if driver/codriver is not there in modifiedTeams then fetch it from allTeams based on Team ids(T1,T2) Eg: Id of codriver from Team T2
Final Output:
{D2,C1,D1,C2}
Can some one help me how I could achieve this via LINQ(Lambda expressions) in C#.
Simple C# code:-
List<string> allDriverCodriverIds = new List<string>();
foreach (var team in modifiedTeams)
{
if (team.Driver != null && !string.IsNullOrEmpty(team.Driver.DriverId))
{
allDriverCodriverIds.Add(team.Driver.DriverId);
}
else {
var existingTeam = allTeams.FirstOrDefault(e => e.Id.ToString() == team.Id);
if (existingTeam != null && existingTeam.Driver != null && !string.IsNullOrEmpty(existingTeam.Driver.DriverId))
{
allDriverCodriverIds.Add(existingTeam.Driver.DriverId);
}
}
if (team.Codriver != null && !string.IsNullOrEmpty(team.Codriver.DriverId))
{
allDriverCodriverIds.Add(team.Codriver.DriverId);
}
else
{
var existingTeam = allTeams.FirstOrDefault(e => e.Id.ToString() == team.Id);
if (existingTeam != null && existingTeam.Codriver != null && !string.IsNullOrEmpty(existingTeam.Codriver.DriverId))
{
allDriverCodriverIds.Add(existingTeam.Codriver.DriverId);
}
}
}