Je suis nouveau sur Linq mais j'ai besoin de terminer rapidement le code. J'ai deux cours:
public class SAPMember
{
public string EmployeeNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<CostCentre> CostCentres { get; set; }
}
public class CostCentre
{
public string EmployeeNumber { get; set; }
public string CostCentreCode { get; set; }
public string Division { get; set; }
}
Chaque membre SAPM peut avoir un ou plusieurs centres de coûts.
Ceci est mon code pour alimenter initialement deux listes indépendantes (en utilisant Dapper), que j'espère ensuite combiner en une liste avec une sous-liste:
_SAPMembers = new List<SAPMember>();
string sql = @"SELECT EmployeeNo as EmployeeNumber,
LastName, FirstName
FROM Employees";
_SAPMembers = DbConn.Query<SAPMember>(sql).ToList();
List<CostCentre> _CostCentres = new List<CostCentre>();
string sql2 = @"SELECT EmployeeNo as EmployeeNumber, CostCentreCode,
DivisionDescription as Division
FROM Employees";
_CostCentres = DbConn.Query<CostCentre>(sql2).ToList();
J'ai essayé le groupement et les jointures Linq, mais je ne peux pas obtenir la syntaxe correcte, et ma liste _SAPMembers contient les détails des employés et la liste des centres de coûts associés.
Échantillon de code serait grandement apprécié. J'ai vu que cela pourrait être possible à partir d'une requête Dapper plus complexe, mais je pense que pour mon niveau de compétence, linq pourrait être une meilleure solution.
Comme Amit a suggéré, je pourrais utiliser Dapper, comme ça: (note: j'ai changé la clé de CostCentre en EmpNo)
if (_SAPMembers == null)
{List _SAPMembers = new List ();
var lookup = new Dictionary<string, SAPMember>();
var result = DbConn.Query<SAPMember, CostCentre, SAPMember>(@"
select DISTINCT e.EmployeeNo as EmployeeNumber, e.LastName, e.FirstName, c.EmployeeNo as EmpNo
, c.CostCentreCode as Name, c.DivisionDescription as Division
FROM EmployeeListing e
join EmployeeListing c on e.EmployeeNo = c.EmployeeNo
where e.TerminationDate is null and c.TerminationDate is null", (e, c) =>
{
if (!lookup.TryGetValue(e.EmployeeNumber, out SAPMember sapMember))
lookup.Add(e.EmployeeNumber, sapMember = e);
if (sapMember.CostCentres == null)
sapMember.CostCentres = new List<CostCentre>();
sapMember.CostCentres.Add(c);
return sapMember;
}, splitOn: "EmpNo");
_SAPMembers = result.Distinct().ToList();
} return _SAPMembers;