먼저 코드 벽에 대해 사과 드리겠습니다. 기본적으로, 나는 셰어 포인트 목록에 대해 두 개의 쿼리가 있습니다. 두 줄의 주석을 달면 코드가 훌륭하게 작동하는 것 같습니다. 내가 주석 경우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 (두 번째 쿼리의 결과) 개수를 확인하면 모두 동일합니다. -
목록을 다시 쿼리 할 수 있도록 모든 방법을 다시 설정하려면 어떻게해야합니까?
확인. 그것은 그것을 고쳤다. 그러나, 나는 왜 아직도 혼란 스럽다. .IsNullOrEmpty를 사용할 때 왜 '! ='를 사용하지 않습니까? 값 중 하나가 null 인 경우 왜 두 번째 쿼리를 완전히 건너 뛸까요? – Corey
필자의 생각에 phn은 null이고 null 이후! = ""그 조건을 실행하려고합니다. 코드가 phn.StartsWith()에 도달하면 NullReferenceException이 throw됩니다. NullReferenceException은 나중에 (사용자가 Try를 보았을 때) 또는 ASP.NET 엔진에서 catch됩니다. 예외가 실행되면 처리 할 수있을 때까지 코드의 나머지 부분은 건너 뜁니다. Visual Studio를 사용하고 있으며 첫 번째 예외를 설정하면 디버거에서 발생하는 상황을 볼 수 있습니다. – Eric
답변 해 주셔서 감사합니다. – Corey