IQueryable + foreach出错

时间:2010-10-22 14:01:55

标签: c# .net sql-server linq iqueryable

我只是想知道是否有任何已知问题,或者我是否做错了什么。每次我做类似下面的例子时,我都会收到错误“服务器无法恢复交易”。

我已经问过另一个关于此错误的问题,但现在我发现它只出现在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 :(得分:0)

您的Client_Id是否是一个延迟加载属性?

if (order.Client_Id != null)检查实际上是在进行某种数据库操作吗?

答案 1 :(得分:0)

在不知道如何处理数据库上下文的情况下,很难确定您是否正确使用了上下文,可能会遇到各种问题。要验证这一点,您可以从列表顺序方法返回IList,如果返回错误并且foreach按预期工作,则很可能与您管理Context的方式有关。

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);
    }
}

答案 2 :(得分:0)

你可以这样做:

IQueryable<Order> ordersList = ListOrders().where(t=>t.Client_Id != string.Empty);