[Mono-list] Optimising some large loops using LINQ question
Andy York
andy at brdstudio.net
Wed Apr 24 12:42:55 UTC 2013
If you do not need to work with a piece of data from a database my
suggestion is always don't ask for it thus eliminating the need for the
loop all together. Let the database do the work databases are good at.
It looks like your not even after any of the data but only to see if the
task id exist in one of two tables and/or databases.
I may not understand your issue making my reply invalid, however I'll
make my suggestion anyways.
I'm not very good with LINQ but if you are any good at SQL something
along the lines of a view or stored procedure like the SQL below. If
your database is designed and indexed well your result set should return
in well under 1 second. Then base your return value on weather or not
you have results.
[code]
SELECT TOP 1 S.TaskID FROM Subscription S WITH(NOLOCK) WHERE S.TaskID =
@TaskID
UNION ALL
SELECT TOP 1 RT.TaskID FROM ReadTasks RT WITH(NOLOCK) WHERE RT.TaskID =
@TaskID
[/code]
On 4/23/2013 8:49 PM, Paul Johnson wrote:
> Hi,
>
> 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;
> break;
> }
> }
> }
> }
>
> 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 ==
> task.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?
>
> Paul
--
Andrew York
.NET & SQL Server Developer
Home: (269) 244-5237
Cell: (269) 816-2095
Email: andy at brdstudio.net
More information about the Mono-list
mailing list