Pergunta

Em primeiro lugar, deixe-me pedir desculpas pela barreira do código.Basicamente, tenho duas consultas nas listas do Sharepoint.O código parece funcionar muito bem se eu comentar algumas linhas.Aqui está o código:

Global:

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;`

Carregamento de página:

// 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");`

Código principal:

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

Se eu comentar:

if (phn.StartsWith("971"))

e

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

tudo funciona bem.Se eu deixá-los lá, só completará o primeiro foreach.Tentei renomear todas as variáveis na segunda consulta, convertendo explicitamente r.phone em string e colocando ToArray no final da consulta de resultados.Nada disso ajudou.

Curiosamente, se eu usar results = results.Take(5); para apenas percorrer alguns, fico com os quartos.Verificando a contagem de resultados e a contagem de res (os resultados da segunda consulta), ambos são iguais - 5.

Como posso redefinir tudo para consultar minhas listas novamente?

Foi útil?

Solução

É possível que phn seja nulo?

Tente substituir r.phone!="" por string.IsNullOrEmpty (r.phone) e / ou ative as exceções de primeira chance em seu depurador.(Depurar-> Exceções-> Exceções de tempo de execução de linguagem comum [verificar])

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top