Enumerate list with filter criteria
I will assume that the CreditCard class is set in stone, otherwise I probably would store a DateTime in it and calculate Year, Month and Day properties based on that value. Or at least add a separate method or property that'd return a DateTime.

With that said, first of all, I wouldn't use DateTime.Compare since there're documented operators for comparing DateTimes (see further here). Using them is certainely more readable, because reading DateTime.Compare(d1, d2) &gt; 0 makes one (at least me) lag for a moment to realize what exactly it means. Personally I like the LINQ variant much more than the loop one, but I don't think that the intermediate Select statement is necessary, because it contains such trivial logic. I think that the most readable variant, that I'd probably put into production code, looks like this:

public int NumberOfCreditCards
{
    get
    {
        DateTime now = DateTime.Now;
        return CreditCards
            .Count(card =&gt; new DateTime(card.Year, card.Month, card.Day) &gt; now);
    }
}


More things that I'd change:


It's probably debatable, but I feel that making NumberOfCreditCards a method and renaming it into something more transparent like GetNumberOfActiveCreditCards would make the code cleaner. It depends on current time and doesn't seem (at least to me) to be a logical atribute of the User type (official guidelines).
You should consider defining the public CreditCards property as IReadOnlyCollection&lt;CreditCard&gt;. A List should be exposed only when you expect the client code to modify your collection, otherwise it's better to use a restrictive interface. And IReadOnlyCollection is better than IEnumerable because it clearly states that the property returns a collection that won't be enumerated at runtime (e.g. that it's not a method with yield return;). It's quite a common practice and the reasoning is written by the TS here. But again, this topic is debatable.