//--------------------------------------------------- public static bool Compare(object o1, object o2, EOperateurJointure operateur) { IComparable c1 = o1 as IComparable; IComparable c2 = o2 as IComparable; if (c1 == null || c2 == null) { return(false); } switch (operateur) { case EOperateurJointure.Egal: return(c1.CompareTo(c2) == 0); case EOperateurJointure.Superieur: return(c1.CompareTo(c2) > 0); case EOperateurJointure.SuperieurEgal: return(c1.CompareTo(c2) >= 0); case EOperateurJointure.Inferieur: return(c1.CompareTo(c2) < 0); case EOperateurJointure.InferieurEgal: return(c1.CompareTo(c2) <= 0); case EOperateurJointure.Different: return(c1.CompareTo(c2) != 0); } return(false); }
//----------------------------------------- public CResultAErreur Serialize(C2iSerializer serializer) { int nVersion = GetNumVersion(); CResultAErreur result = serializer.TraiteVersion(ref nVersion); if (!result) { return(result); } result = serializer.TraiteObject <C2iExpression>(ref m_formuleTable1); if (result) { result = serializer.TraiteObject <C2iExpression>(ref m_formuleTable2); } if (!result) { return(result); } int nOperateur = (int)m_operateur; serializer.TraiteInt(ref nOperateur); m_operateur = (EOperateurJointure)nOperateur; return(result); }
private List <CMapRows> GetMatches(Dictionary <object, List <DataRow> > dic1, Dictionary <object, List <DataRow> > dic2, EOperateurJointure operateur) { List <CMapRows> lstRetour = new List <CMapRows>(); if (operateur == EOperateurJointure.Egal) { foreach (KeyValuePair <object, List <DataRow> > kv in dic1) { List <DataRow> lst2 = null; if (dic2.TryGetValue(kv.Key, out lst2)) { //Egalité trouvée lstRetour.Add(new CMapRows(kv.Value, lst2)); } else { if (ModeJointure == EModeJointure.Left || ModeJointure == EModeJointure.Outer) { lstRetour.Add(new CMapRows(kv.Value, new List <DataRow>())); } } } if (ModeJointure == EModeJointure.Right || ModeJointure == EModeJointure.Outer) //Ajoute les élément 2 non trouvés dans les éléments 1 { foreach (KeyValuePair <object, List <DataRow> > kv in dic2) { if (!dic1.ContainsKey(kv.Key)) { lstRetour.Add(new CMapRows(new List <DataRow>(), kv.Value)); } } } } else//Autre opérateur, on est obligé de tout balayer { foreach (KeyValuePair <object, List <DataRow> > kv1 in dic1) { foreach (KeyValuePair <object, List <DataRow> > kv2 in dic2) { if (CParametreJointure.Compare(kv1.Key, kv2.Key, operateur)) { lstRetour.Add(new CMapRows(kv1.Value, kv2.Value)); } } } } return(lstRetour); }