2010-10-22 72 views
0

我只想知道是否有任何已知问题,或者如果我做错了什么。每次我按照下面的示例进行操作时,出现错误“服务器无法恢复交易”。IQueryable + foreach中的错误

我已经问了一下这个错误的另一个问题,但现在我已经想通了,它只会出现在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); 
     } 
    } 
代码
+0

你能告诉什么ListOrders()是干什么的?听起来像IQueryable 接口没有正确实施。 (我知道IQueryable的问题 - 为了“foreach”工作,您需要IQueryable提供/需要的IEnumerable)。 – Les 2010-10-22 14:06:36

+0

它是..你能说更多关于需要IEnumerable的IQueryable吗? – 2010-10-22 14:23:03

+1

你可以显示datacontext('db')的来源?它是用'using'包裹在'foreach'循环中吗? – 2010-10-22 14:34:20

回答

0

你的Client_Id是一个懒加载属性吗?

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

+0

Client_Id是Order表中的一个属性(db是DataContext,声明的类级别) – 2010-10-22 14:39:00

+0

是否与此项目相关:http://stackoverflow.com/questions/1388599/periodic- invalidcastexception-and-the-server-failed-resume-the-transaction-w 您使用的是哪个数据库? – MattC 2010-10-22 14:50:15

+0

我正在使用SQL Sv2008,.NEt3.5和问题是相同的:“定期”错误。看来,SQL服务器不是“查杀”查询过程,但我很确定问题是foreach。 – 2010-10-22 14:55:52

0

不知道你是如何处理你的数据库上下文,很难确切地知道,如果你没有正确使用上下文,你可能会遇到各种问题。为了验证这一点,你可以从列表顺序方法中返回一个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

你可以这样说:

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