1

Tout d'abord permettez-moi de m'excuser pour le mur de code. Fondamentalement, j'ai deux deux requêtes contre les listes Sharepoint. Le code semble bien fonctionner si je commente quelques lignes. Voici le code:LINQ Résultats de la requête et méthodes de chaîne

mondiale:

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

chargement de la page:

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

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

Si je en commentaire:

if (phn.StartsWith("971")) 

et

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

tout fonctionne bien. Si je les laisse, cela ne fait que compléter le premier foreach. J'ai essayé de renommer toutes les variables dans la deuxième requête, en transformant explicitement r.phone en chaîne et en plaçant ToArray à la fin de la requête de résultats. Aucun de ceux-ci n'a aidé. Il est intéressant, si j'utilise results = results.Take(5); juste pour traverser quelques-uns que je reçois les chambres. En vérifiant le nombre de résultats et le nombre de res (les résultats de la deuxième requête), ils sont identiques - 5.

Comment puis-je tout réinitialiser pour réexaminer mes listes?

Répondre

1

Est-il possible que phn soit nul? Essayez de remplacer r.phone! = "" Par string.IsNullOrEmpty (r.phone) et/ou activez les exceptions de première chance dans votre débogueur. (Debug-> Exceptions-> Common Language Runtime Exceptions [vérification])

+0

Ok. Cela l'a réparé. Mais, je suis toujours confus quant à pourquoi. Pourquoi se passe-t-il quand j'utilise .IsNullOrEmpty qui ne fonctionne pas quand j'utilise '! ='? Si l'une des valeurs était null, pourquoi ignorerait-elle totalement la deuxième requête? – Corey

+0

Ma conjecture est que phn est nul et puisque null! = "" Il essaye d'exécuter cette condition. Lorsque le code frappe phn.StartsWith(), il renvoie une exception NullReferenceException qui est récupérée plus tard par vous (je vois un Try (là-haut) ou par le moteur ASP.NET. Une fois qu'une exception est exécutée, le reste de votre code sera ignoré jusqu'à ce que quelque chose puisse le gérer. Si vous utilisez Visual Studio et que vous activez des exceptions de première chance, vous devriez être en mesure de voir ce qui se passe dans le débogueur. – Eric

+0

Merci pour les réponses. – Corey

Questions connexes