user584018
user584018

Reputation: 11304

can I get the latest file without calculating LastOrDefault

Can I get the latest file within foreach loop without calculating last variable using LastOrDefault ?

I don't want to repeat archive.Entries.OrderBy(x => x.LastWriteTime) 2 times

var last = archive.Entries.OrderBy(x => x.LastWriteTime).LastOrDefault();

        foreach (var entry in archive.Entries.OrderBy(x => x.LastWriteTime))
        {
            Console.WriteLine(entry.Equals(last) ? $"latest file: {entry.Name}" : entry.Name);
        }

Upvotes: 0

Views: 52

Answers (1)

Slava Knyazev
Slava Knyazev

Reputation: 6081

You can break the chain of LINQ queries at any point and resume in another context.

// Note: ToArray() is necessary to prevent double-enumeration in the case of a Queryable set. 
// It's not necessary for constructs which are already enumerated
var ordered = archive.Entries.OrderBy(x => x.LastWriteTime).ToArray(); 
var last = ordered.LastOrDefault();

foreach (var entry in ordered)
        {
            Console.WriteLine(entry.Equals(last) ? $"latest file: {entry.Name}" : entry.Name);
        }

Upvotes: 2

Related Questions