1

먼저 코드 벽에 대해 사과 드리겠습니다. 기본적으로, 나는 셰어 포인트 목록에 대해 두 개의 쿼리가 있습니다. 두 줄의 주석을 달면 코드가 훌륭하게 작동하는 것 같습니다. 내가 주석 경우LINQ 쿼리 결과 및 문자열 메서드

try 
{ 
    // - - - - - L O A D T H E * P E O P L E * - - - - - 

    // Create List objects 
    List<Seating_chartItem> seatList = (from seat in _seatCharts where seat.Room == 0 where seat.Floor == floor select seat).ToList(); 
    List<UsersItem> usersList = (from user in _users select user).ToList(); 
    var xusersList = (from xuser in _exusers select xuser.User_id).ToList(); 
    usersList = usersList.Where(user => !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<Seating_chartItem> seatListRooms = (from seatRoom in _seatCharts where seatRoom.Room == 1 where seatRoom.Floor == floor select seatRoom).ToList(); 
    List<RoomsItem> 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); 
    } 
} 

:

글로벌 :

private string mUserName = ""; 
// Entity classes for the Sharepoint Lists 
private SeatingChartContext _dc; 
private EntityList<Seating_chartItem> _seatCharts; 
private EntityList<UsersItem> _users; 
private EntityList<Excluded_usersItem> _exusers; 
private EntityList<RoomsItem> _rooms; 
private EntityList<LogsItem> _logs;` 

페이지로드 :

// Get the Lists from Sharepoint 
_dc = new SeatingChartContext(SPContext.Current.Web.Url); 
_seatCharts = _dc.GetList<Seating_chartItem>("seating_chart"); 
_users = _dc.GetList<UsersItem>("users"); 
_exusers = _dc.GetList<Excluded_usersItem>("excluded_users"); 
_rooms = _dc.GetList<RoomsItem>("rooms"); 
_logs = _dc.GetList<LogsItem>("logs");` 

홈페이지 코드 여기에 코드입니다

if (phn.StartsWith("971")) 

string extension = phn.Substring(phn.Length - 4, 4); 

다 잘 실행됩니다. 내가 그것들을 떠나면 첫 번째 foreach 만 완료합니다. r.phone을 문자열로 명시 적으로 캐스팅하고 결과 쿼리의 끝에 ToArray를 배치하여 두 번째 쿼리의 모든 변수 이름을 변경하려고했습니다. 이들 중 아무도 도움이되지 못했습니다.

흥미롭게도, 내가 약간의 걸을 때 results = results.Take(5);을 사용하면 나는 방을 얻는다. 결과 개수와 res (두 번째 쿼리의 결과) 개수를 확인하면 모두 동일합니다. -

목록을 다시 쿼리 할 수 ​​있도록 모든 방법을 다시 설정하려면 어떻게해야합니까?

답변

1

phn이 null 일 수 있습니까?

r.phone! = ""을 string.IsNullOrEmpty (r.phone)로 바꾸거나 디버거에서 첫 번째 예외를 설정하십시오. (디버그 -> 예외 -> 공용 언어 런타임 예외 [확인])

+0

확인. 그것은 그것을 고쳤다. 그러나, 나는 왜 아직도 혼란 스럽다. .IsNullOrEmpty를 사용할 때 왜 '! ='를 사용하지 않습니까? 값 중 하나가 null 인 경우 왜 두 번째 쿼리를 완전히 건너 뛸까요? – Corey

+0

필자의 생각에 phn은 null이고 null 이후! = ""그 조건을 실행하려고합니다. 코드가 phn.StartsWith()에 도달하면 NullReferenceException이 throw됩니다. NullReferenceException은 나중에 (사용자가 Try를 보았을 때) 또는 ASP.NET 엔진에서 catch됩니다. 예외가 실행되면 처리 할 수있을 때까지 코드의 나머지 부분은 건너 뜁니다. Visual Studio를 사용하고 있으며 첫 번째 예외를 설정하면 디버거에서 발생하는 상황을 볼 수 있습니다. – Eric

+0

답변 해 주셔서 감사합니다. – Corey