Ejemplo n.º 1
0
Archivo: Person.cs Proyecto: vs06/bvcms
        public List<Duplicate> PossibleDuplicates2()
        {
            using (var ctx = new CMSDataContext(Util.ConnectionString))
            {
                ctx.SetNoLock();
                string street = GetStreet(ctx) ?? "--";
                var nick = NickName ?? "--";
                var maid = MaidenName ?? "--";
                var em = EmailAddress ?? "--";
                if (!em.HasValue())
                    em = "--";
                var bd = BirthDay ?? -1;
                var bm = BirthMonth ?? -1;
                var byr = BirthYear ?? -1;
                var q = from p in ctx.People
                        where p.PeopleId != PeopleId
                        let firstmatch = p.FirstName == FirstName || (p.NickName ?? "") == FirstName || (p.MiddleName ?? "") == FirstName
                                    || p.FirstName == nick || (p.NickName ?? "") == nick || (p.MiddleName ?? "") == nick
                        let lastmatch = p.LastName == LastName || (p.MaidenName ?? "") == LastName
                                    || (p.MaidenName ?? "") == maid || p.LastName == maid
                        let nobday = (p.BirthMonth == null && p.BirthYear == null && p.BirthDay == null)
                                    || (BirthMonth == null && BirthYear == null && BirthDay == null)
                        let bdmatch = (p.BirthDay ?? -2) == bd && (p.BirthMonth ?? -2) == bm && (p.BirthYear ?? -2) == byr
                        let bdmatchpart = (p.BirthDay ?? -2) == bd && (p.BirthMonth ?? -2) == bm
                        let emailmatch = p.EmailAddress != null && p.EmailAddress == em
                        let addrmatch = (p.AddressLineOne ?? "").Contains(street) || (p.Family.AddressLineOne ?? "").Contains(street)
                        let s1 = firstmatch && bdmatchpart
                        let s2 = firstmatch && bdmatch
                        let s3 = firstmatch && lastmatch && nobday
                        let s4 = firstmatch && addrmatch
                        let s5 = firstmatch && emailmatch
                        let s6 = lastmatch && bdmatch
                        where s1 || s2 || s3 || s4 || s5 || s6
                        select new Duplicate
                        {
                            s1 = s1,
                            s2 = s2,
                            s3 = s3,
                            s4 = s4,
                            s5 = s5,
                            s6 = s6,
                            PeopleId = p.PeopleId,
                            First = p.FirstName,
                            Last = p.LastName,
                            Nick = p.NickName,
                            Middle = p.MiddleName,
                            BMon = p.BirthMonth,
                            BDay = p.BirthDay,
                            BYear = p.BirthYear,
                            Email = p.EmailAddress,
                            FamAddr = p.Family.AddressLineOne,
                            PerAddr = p.AddressLineOne,
                            Member = p.MemberStatus.Description
                        };
                try
                {
                    var list = q.ToList();
                    var t = new Duplicate
                    {
                        s0 = true,
                        PeopleId = PeopleId,
                        First = FirstName,
                        Last = LastName,
                        Nick = NickName,
                        Middle = MiddleName,
                        BMon = BirthMonth,
                        BDay = BirthDay,
                        BYear = BirthYear,
                        Email = EmailAddress,
                        FamAddr = Family.AddressLineOne,
                        PerAddr = AddressLineOne,
                        Member = MemberStatus.Description
                    };
                    list.Insert(0, t);

                    return list;
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
Ejemplo n.º 2
0
        public static Person FindPerson(string first, string last, DateTime? DOB, string email, string phone, out int count)
        {
            count = 0;
            if (!first.HasValue() || !last.HasValue())
                return null;
            first = first.Trim();
            last = last.Trim();
            var fone = Util.GetDigits(phone);
            var ctx = new CMSDataContext(Util.ConnectionString);
            ctx.SetNoLock();
            var q = from p in ctx.People
                    where (p.FirstName == first || p.NickName == first || p.MiddleName == first)
                    where (p.LastName == last || p.MaidenName == last)
                    select p;
            var list = q.ToList();
            count = list.Count;
            if (count == 0) // not going to find anything
            {
                ctx.Dispose();
                return null;
            }

            if (DOB.HasValue && DOB > DateTime.MinValue)
            {
                var dt = DOB.Value;
                if (dt > Util.Now)
                    dt = dt.AddYears(-100);
                var q2 = from p in q
                         where p.BirthDay == dt.Day && p.BirthMonth == dt.Month && p.BirthYear == dt.Year
                         select p;
                count = q2.Count();
                if (count == 1) // use only birthday if there and unique
                    return PersonFound(ctx, q2);
            }
            if (email.HasValue())
            {
                var q2 = from p in q
                         where p.EmailAddress == email
                         select p;
                count = q2.Count();
                if (count == 1)
                    return PersonFound(ctx, q2);
            }
            if (phone.HasValue())
            {
                var q2 = from p in q
                         where p.CellPhone.Contains(fone) || p.Family.HomePhone.Contains(fone)
                         select p;
                count = q2.Count();
                if (count == 1)
                    return PersonFound(ctx, q2);
            }
            return null;
        }
Ejemplo n.º 3
0
Archivo: Person.cs Proyecto: vs06/bvcms
 public List<Duplicate> PossibleDuplicates()
 {
     var fone = Util.GetDigits(Util.PickFirst(CellPhone, HomePhone));
     using (var ctx = new CMSDataContext(Util.ConnectionString))
     {
         ctx.SetNoLock();
         string street = GetStreet(ctx) ?? "--";
         var nick = NickName ?? "--";
         var maid = MaidenName ?? "--";
         var em = EmailAddress ?? "--";
         if (!em.HasValue())
             em = "--";
         var bd = BirthDay ?? -1;
         var bm = BirthMonth ?? -1;
         var byr = BirthYear ?? -1;
         var q = from p in ctx.People
                 let firstmatch = p.FirstName == FirstName || (p.NickName ?? "") == FirstName || (p.MiddleName ?? "") == FirstName
                             || p.FirstName == nick || (p.NickName ?? "") == nick || (p.MiddleName ?? "") == nick
                 let lastmatch = p.LastName == LastName || (p.MaidenName ?? "") == LastName
                             || (p.MaidenName ?? "") == maid || p.LastName == maid
                 let nobday = (p.BirthMonth == null && p.BirthYear == null && p.BirthDay == null)
                             || (BirthMonth == null && BirthYear == null && BirthDay == null)
                 let bdmatch = (p.BirthDay ?? -2) == bd && (p.BirthMonth ?? -2) == bm && (p.BirthYear ?? -2) == byr
                 let bdmatchpart = (p.BirthDay ?? -2) == bd && (p.BirthMonth ?? -2) == bm
                 let emailmatch = p.EmailAddress != null && p.EmailAddress == em
                 let addrmatch = (p.AddressLineOne ?? "").Contains(street) || (p.Family.AddressLineOne ?? "").Contains(street)
                 let phonematch = (p.CellPhoneLU == CellPhoneLU
                                     || p.CellPhoneLU == Family.HomePhoneLU
                                     || p.CellPhone == WorkPhoneLU
                                     || p.Family.HomePhoneLU == CellPhoneLU
                                     || p.Family.HomePhoneLU == Family.HomePhoneLU
                                     || p.Family.HomePhoneLU == WorkPhoneLU
                                     || p.WorkPhoneLU == CellPhoneLU
                                     || p.WorkPhoneLU == Family.HomePhoneLU
                                     || p.WorkPhoneLU == WorkPhoneLU)
                 let samefamily = p.FamilyId == FamilyId && p.PeopleId != PeopleId
                 let nmatches = samefamily ? 0 :
                                 (firstmatch ? 1 : 0)
                                 + (bdmatch ? 1 : 0)
                                 + (emailmatch ? 1 : 0)
                                 + (phonematch ? 1 : 0)
                                 + (addrmatch ? 1 : 0)
                 where (lastmatch && nmatches >= 3)
                         || ((firstmatch && lastmatch && bdmatchpart))
                 where p.PeopleId != PeopleId
                 select new Duplicate
                                         {
                                             PeopleId = p.PeopleId,
                                             First = p.FirstName,
                                             Last = p.LastName,
                                             Nick = p.NickName,
                                             Middle = p.MiddleName,
                                             BMon = p.BirthMonth,
                                             BDay = p.BirthDay,
                                             BYear = p.BirthYear,
                                             Email = p.EmailAddress,
                                             FamAddr = p.Family.AddressLineOne,
                                             PerAddr = p.AddressLineOne,
                                             Member = p.MemberStatus.Description
                                         };
         var list = q.ToList();
         return list;
     }
 }