Ошибка в IQueryable + foreach - PullRequest
       0

Ошибка в IQueryable + foreach

1 голос
/ 22 октября 2010

Я просто хочу знать, есть ли какая-либо известная проблема, или я делаю что-то не так.Каждый раз, когда я делаю что-то вроде приведенного ниже примера, я получаю сообщение «серверу не удалось возобновить транзакцию».

Я уже задавал другой вопрос об этой ошибке, но теперь японял, что он появляется только в foreach петлях

            //Listing orders
            IQueryable<Order> ordersList = ListOrders();

            foreach (Order order in ordersList)
            {
                    if (order.Client_Id != null) //get the exception here.
                    {
                        //some code
                    }
            }

Обновление : код для ListOrders ()

    public IQueryable<Order> ListOrders()
    {
        try
        {
            return from o in db.Orders
                   where o.Id == this.Id
                   select o;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
    }

Ответы [ 3 ]

0 голосов
/ 25 октября 2010

Не зная, как вы обрабатываете свой контекст БД, трудно точно знать, как будто вы неправильно используете контекст, у вас могут возникнуть все виды проблем. Чтобы убедиться в этом, вы можете вернуть IList из методов порядка списков, и если он возвращается без ошибок и ваш foreach работает должным образом, это, скорее всего, связано с тем, как вы управляете контекстом.

public IList<Order> ListOrders()
{
    try
    {
        return (from o in db.Orders
                where o.Id == this.Id
                select o).ToList();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message, ex);
    }
}
0 голосов
/ 02 августа 2012

Вы можете сделать это так:

IQueryable<Order> ordersList = ListOrders().where(t=>t.Client_Id != string.Empty);
0 голосов
/ 22 октября 2010

Является ли ваш Client_Id свойством ленивой загрузки?

Итак, проверка if (order.Client_Id != null) выполняет какую-то операцию с базой данных?

...