Any IEnumerable assumes deferred execution, so you want to use it in your query when your search is further processed downstream (filtering is the most obvious scenario).
If this is not the case, and you really want to make sure that you have not listed the collection more than once, you will make it available as IList, ISet or ICollection. IList would be preferable if you want to make sure that the collection can have duplicates, while ISet is preferable if you want the set to not be cheated (the given behavior was more useful in my experience).
Both IList and ISet are ICollections that expose the behavior of a collection with bones, such as Count. In the context of NHib, you can see this in implementations where Iesi collections are used instead of .net HashSet, but this is more likely due to the fact that once there was no .net HashSet, and then there was a lag in NHib's ability to use it easily (but NHib will be able to display ICollection in Iesi set).
NTN
source share