баг в LINQ Update
От: pr0ff  
Дата: 26.10.10 11:00
Оценка:
            foreach (string group in groupedResult)
            {
                TaskDescription description = GetDescription(group);
                if (description.Error)
                    continue;

                int take = description.PreloadCount;
                if (take == 0)
                    take = description.Concurrent;
                if (take == 0)
                    take = _pool.Concurrency;

                string g = group;
                take = take - _tasks.Where(a => a.ClassName == g).Count();

                IQueryable<CoreTask> q1 =
                    db.CoreTasks.Where(a => a.ClassName == g && (a.LockID == null || a.LockTimeout < DateTime.Now) && a.RunAt < DateTime.Now).
                        OrderBy(a => a.RunAt).Take(take);
                q = q == null ? q1 : q.Union(q);
            }
            if (q == null)
                return;

            db.CoreTasks.Update(a => q.Contains(a),
                                a => new CoreTask {LockID = _lockID, LockTimeout = DateTime.Now + _lockTimeout});

            //q.Update(a => new CoreTask { LockID = _lockID, LockTimeout = DateTime.Now + _lockTimeout });

закоментированный вариант не пашет (ошибка в синтаксисе SQL), не закоментированный пашет. У меня сейчас полно дел, а SQL Profiler почему-то вылетает. Так что пока ничем больше не могу помочь. Используется MSSQL, в цикле была одна итерация, так что тестилось без Union
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
https://www.certificationlogobuilder.com/images/certtracks/MCP.gif
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.