That is not a purpose of generic methods. If you write a method which has signature:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something)
you are defining "a shared logic". It means that the same logic must work for every T passed to the method. If it doesn't you must constraint the T by using some kind of constraint:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something) where T : ISomeInterface
Now you know that every T passed to the method must implement ISomeInterface and you can use in your method any property or method declared on that interface.
Content of the method is not supposed to be different for different type of T but logic can because you can call Ts methods and properties which can have different implementation. If it is not enough you can pass another parameter - generic delegate or some another generic class based on T which will add some additional logic for you.
In you scenario you want to compare each passed class differently => comparison cannot be part of your method but it must either be part of your entities or you must pass additional class / method which will do the comparison for the method.
For implementing comparison directly in your classes you can implement IComparable<T> interface and declare your method as:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something) where T : IComparable<T>
For implementing comparison outside of your classes you can simply use Func<T, T, int> or implementation of IComparer<T>:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something, IComparer<T> comparer)
In either case I'm not sure how does this relate to entity framework because signature of your method has nothing to do with EF.
Plan.nm == Plan2.nm