Instead returning the difference, it returns the original set.
I've tried by implementing the IEquatable and IEqualityComparer in the Account.
I've also tried creating a seperate IEqualityComparer class for Account.
When the Except() method is called from main, it doesn't seem to call my custom Equals() method, but when I tried Count(), it did call the custom GetHashCode() method!
I'm sure I made a trivial mistake somewhere and I hope a fresh pair of eyes can help me.
main:
Expand|Select|Wrap|Line Numbers
- IEnumerable<Account> everyPartnerID =
- from partner in dataContext.Partners
- select new Account { IDPartner = partner.ID, Name = partner.Name };
- IEnumerable<Account> hasAccountPartnerID =
- from partner in dataContext.Partners
- from account in dataContext.Accounts
- where
- !partner.ID.Equals(Guid.Empty) &&
- account.IDPartner.Equals(partner.ID) &&
- account.Username.Equals("Special")
- select new Account { IDPartner = partner.ID, Name = partner.Name };
- IEnumerable<Account> noAccountPartnerID =
- everyPartnerID.Except(
- hasAccountPartnerID,
- new LambdaComparer<Account>((x, y) => x.IDPartner.Equals(y.IDPartner)));
Expand|Select|Wrap|Line Numbers
- public class Account : IEquatable<Account>
- {
- public Guid IDPartner{ get; set; }
- public string Name{ get; set; }
- /* #region IEquatable<Account> Members
- public bool Equals(Account other)
- {
- return this.IDPartner.Equals(other.IDPartner);
- }
- #endregion*/
- }
Expand|Select|Wrap|Line Numbers
- public class LambdaComparer<T> : IEqualityComparer<T>
- {
- private readonly Func<T, T, bool> _lambdaComparer;
- private readonly Func<T, int> _lambdaHash;
- public LambdaComparer(Func<T, T, bool> lambdaComparer) :
- this(lambdaComparer, o => o.GetHashCode())
- {
- }
- public LambdaComparer(Func<T, T, bool> lambdaComparer, Func<T, int> lambdaHash)
- {
- if (lambdaComparer == null)
- throw new ArgumentNullException("lambdaComparer");
- if (lambdaHash == null)
- throw new ArgumentNullException("lambdaHash");
- _lambdaComparer = lambdaComparer;
- _lambdaHash = lambdaHash;
- }
- public bool Equals(T x, T y)
- {
- return _lambdaComparer(x, y);
- }
- public int GetHashCode(T obj)
- {
- return _lambdaHash(obj);
- }
- }