title: LINQ Query results and string methods
body: <p>First of all let me apologize for the wall of code. Basically, I have two two queries against Sharepoint lists. The code seems to work great if I comment a couple of lines. Here is the code:</p>
  
  <p>Global:</p>
  
  <pre><code>private string mUserName = "";
  // Entity classes for the Sharepoint Lists
  private SeatingChartContext _dc;
  private EntityList&lt;Seating_chartItem&gt; _seatCharts;
  private EntityList&lt;UsersItem&gt; _users;
  private EntityList&lt;Excluded_usersItem&gt; _exusers;
  private EntityList&lt;RoomsItem&gt; _rooms;
  private EntityList&lt;LogsItem&gt; _logs;`
  </code></pre>
  
  <p>Page Load:</p>
  
  <pre><code>// Get the Lists from Sharepoint
  _dc = new SeatingChartContext(SPContext.Current.Web.Url);
  _seatCharts = _dc.GetList&lt;Seating_chartItem&gt;("seating_chart");
  _users = _dc.GetList&lt;UsersItem&gt;("users");
  _exusers = _dc.GetList&lt;Excluded_usersItem&gt;("excluded_users");
  _rooms = _dc.GetList&lt;RoomsItem&gt;("rooms");
  _logs = _dc.GetList&lt;LogsItem&gt;("logs");`
  </code></pre>
  
  <p>Main code:</p>
  
  <pre><code>try
  {
      //  - - - - -   L O A D   T H E   * P E O P L E *   - - - - -
  
      // Create List objects
      List&lt;Seating_chartItem&gt; seatList = (from seat in _seatCharts where seat.Room == 0 where seat.Floor == floor select seat).ToList();
      List&lt;UsersItem&gt; usersList = (from user in _users select user).ToList();
      var xusersList = (from xuser in _exusers select xuser.User_id).ToList();
      usersList = usersList.Where(user =&gt; !xusersList.Contains(user.User_id)).ToList();
  
      // Query and use anonymous object for values
      var results = from seat in seatList
                    join user in usersList on
                    seat.User_id equals user.User_id
                    select new
                               {
                                   sid = seat.Seat_id,
                                   icon = seat.Icon,
                                   topCoord = seat.Top_coord,
                                   leftCoord = seat.Left_coord,
                                   name = user.Name,
                                   phone = user.Phone,
                                   mobile = user.Mobile,
                                   content = seat.Content
                               };
  
      results = results.Take(5);
      foreach (var r in results)
      {
          ImageButton img = new ImageButton();
          img.ID = "seat-" + r.sid;
          img.ImageUrl = "http://cxsmoss/rooms/" + r.icon;
          img.Style.Add(HtmlTextWriterStyle.Position, "absolute");
          img.Style.Add(HtmlTextWriterStyle.Top, r.topCoord + "px");
          img.Style.Add(HtmlTextWriterStyle.Left, r.leftCoord + "px");
          if (r.name == "")
              img.ToolTip = "no name!";
          else
              img.ToolTip = r.name;
          if (r.phone != "")
          {
              string phn = r.phone;
              if (phn.StartsWith("971")) // Comment this line
              {
                  string extension = phn.Substring(phn.Length - 4, 4); //Comment this line
                  img.ToolTip += Environment.NewLine + "x" + extension;
  
              }
              else
                  img.ToolTip += Environment.NewLine + "x" + phn;
          }
          if (r.mobile != "")
              img.ToolTip += Environment.NewLine + "mobile:  " + r.mobile;
          img.ToolTip += Environment.NewLine + "room/cubicle: " + r.content.ToLower().Replace("seat ", "");
          img.PostBackUrl = ""; // "Default.aspx?name=" + row["name"].ToString();
          img.OnClientClick = "UpdateEmployeeInfo('" + r.name.ToString() + "', '" + img.ID + "');return false;";
          // For debugging size
          img.ToolTip += Environment.NewLine + "Results size " + results.Count();
          floorPanel.Controls.Add(img);
      }
  
  
      //  - - - - -   L O A D   T H E   * R O O M S *   - - - - -
  
      List&lt;Seating_chartItem&gt; seatListRooms = (from seatRoom in _seatCharts where seatRoom.Room == 1 where seatRoom.Floor == floor select seatRoom).ToList();
      List&lt;RoomsItem&gt; roomsList = (from room in _rooms select room).ToList();
  
      // Query and use anonymous object for values
      var res = from seatRoom in seatListRooms
                join room in roomsList on
                seatRoom.Seat_id equals room.Room_id
                select new
                {
                    rid = room.Room_id,
                    name = room.Name,
                    icon = seatRoom.Icon,
                    topCoord = seatRoom.Top_coord,
                    leftCoord = seatRoom.Left_coord,
                    phone = room.Phone,
                    content = seatRoom.Content
                };
  
      foreach (var s in res)
      {
          ImageButton img = new ImageButton();
          img.ID = "room-" + s.rid;
          //img.ID = row["icon"].ToString();
          img.ImageUrl = "http://cxsmoss/rooms/" + s.icon;
          img.Style.Add(HtmlTextWriterStyle.Position, "absolute");
          img.Style.Add(HtmlTextWriterStyle.Top, s.topCoord + "px");
          img.Style.Add(HtmlTextWriterStyle.Left, s.leftCoord + "px");
          img.ToolTip = s.name;
          if (s.phone != "")
              img.ToolTip += Environment.NewLine + "x" + s.phone;
          img.ToolTip += Environment.NewLine + "room " + s.content;
          img.OnClientClick = "UpdateRoomInfo('" + s.name + "', '" + img.ID + "');return false;";
          img.ToolTip += Environment.NewLine + "Res size " + results.Count();
          floorPanel.Controls.Add(img);
      }
  }
  </code></pre>
  
  <p>If I comment out:</p>
  
  <pre><code>if (phn.StartsWith("971"))
  </code></pre>
  
  <p>and</p>
  
  <pre><code>string extension = phn.Substring(phn.Length - 4, 4);
  </code></pre>
  
  <p>everything runs fine. If I leave them in it only completes the first foreach. I have tried renaming all of the variables in the second query, explicitly casting r.phone to string and placing ToArray on the end of the results query. None of these helped.</p>
  
  <p>Interestingly, if I use <code>results = results.Take(5);</code> to just walk through a few I get the rooms. Checking for the count of results and the count of res (the results of the second query) they are both the same - 5. </p>
  
  <p>How can I reset everything so I can query my lists again?</p>