[Mono-list] Optimising some large loops using LINQ question

Paul Johnson paul at all-the-johnsons.co.uk
Wed Apr 24 00:49:20 UTC 2013


I'm working on a project that has some very large loops in it that I'd 
like to remove and use some bits of LINQ to speed things up.

The current code looks like this

foreach (Task t in db.getSubscription().Tasks)
      if (t.TaskID == task.TaskID)
           foreach (ReadTask rt in db.ReadTasks.ReadTasks)
               if (rt.TaskID == task.TaskID)
                    result = true;

db.getSubscription().Tasks and db.ReadTasks.ReadTasks can both be huge, 
so iterating through them could take quite a while.

The LINQ I've come up with looks like this

Task t = db.getSubscription().Tasks.FirstOrDefault(s => s.TaskID == 
if (t != null)
      ReadTask rt = db.ReadTasks.ReadTasks.FirstOrDefault(s => s.TaskID 
== task.TaskID);
      if (rt != null)
             result = true;

Questions are, are these two pieces of code equivalent and should this 
be FirstOrDefault or just First?

"Space," it says, "is big. Really big. You just won't believe how 
vastly, hugely, mindbogglingly big it is. I mean, you may think it's a 
long way down the road to the chemist's, but that's just peanuts to 
space, listen..."
Hitch Hikers Guide to the Galaxy, a truly remarkable book!

More information about the Mono-list mailing list