none
Associar uma llista filtrada à outra ou carregar a mesma lista com filtro? RRS feed

  • Pergunta

  • Eu preciso atribuir uma lista filtrada para outra lista e retorná-la, no entanto eu não sei a estrutura da lista que irá ser filtrada, só sei seu nome. O problema é que com o filtro eu consigo uma coleção de itens da lista e não a mesma filtrada e no meu caso não é possível trabalhar com views porque mesmo que fizesse uma view eu preciso retornar uma lista para o resto da lógica.

    Abaixo segue o método com o qual capturo a lista, tem algumas coisas especificas pq estou capturando a lista de um site de projeto do Project Server 2010, mas a lógica pra lista em si não muda, eu acho.
     
    /// <summary> 
           
    /// reads the list to display 
           
    /// </summary> 
           
    /// <returns></returns> 
           
    public SPList GetListFromProjectWorkSpace() 
           
    { 
               
    SPList list = null; 
     
               
    Guid projUID = _helper.GetProjUID(); 
               
    if (projUID == Guid.Empty) 
               
    { 
                   
    return list; 
               
    } 
     
               
    // read project data 
               
    IProjectWssInfoDataSet dataset = _service.ReadWssData(projUID); 
               
    if (dataset.ProjWssInfo.Count == 0) 
               
    { 
                   
    return list; 
               
    } 
     
               
    // get workspace name and url 
               
    string workspaceName = dataset.ProjWssInfo[0].WorkspaceName; 
               
    string workspaceUrl = dataset.ProjWssInfo[0].WorkspaceUrl; 
     
     
               
    SPSecurity.RunWithElevatedPrivileges(()=> 
               
    { 
                   
    using (SPSite site = new SPSite(workspaceUrl)) 
                   
    { 
     
                       
    for (int i = 0; i < site.AllWebs.Count; i++) 
                           
    { 
                               
    if (!site.AllWebs[i].ServerRelativeUrl.Contains(workspaceName)) 
                               
    { 
                                   
    continue; 
                               
    } 
     
                               
    try 
                               
    { 
                                    list
    = site.AllWebs[i].Lists[SelectedList]; 
     
                               
    } 
                               
    catch 
                               
    { 
                               
    } 
     
     
                           
    } 
     
                           
    SPQuery query = new SPQuery(); 
     
                            query
    .Query = @"<Where> 
                                              <Contains> 
                                                 <FieldRef Name='LinkFilenameNoMenu' /> 
                                                 <Value Type='Computed'>work</Value> 
                                              </Contains> 
                                           </Where>"
    ; 
     
     
     
                           
    SPListItemCollection  itens = list.Items.List.GetItems(query); 
     
                    
    // A partir daqui eu preciso de ajuda. 
     
     
     
                   
    } 
               
    }); 
     
     
               
    return list; 
           
    } 
     
     
    Obrigado,
    Eduardo Araújo
    • Editado Eduardo Araújo quinta-feira, 30 de dezembro de 2010 12:46 assinatura
    quinta-feira, 30 de dezembro de 2010 12:45

Todas as Respostas


  • Olá Eduardo,

    Você conhece LINQ para o SP2010? Se não recomendo que analise a possibilidade de realizar esta atividade utilizando. Com ele você ganha em produtividade como o Interlicense.

    LINQ to SharePoint DSL Extension for Visual Studio 2010

    http://code.msdn.microsoft.com/linq2spdsl/

     
    Leandro Figueira

    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.

    • Sugerido como Resposta Leandro Figueira quinta-feira, 30 de dezembro de 2010 13:34
    quinta-feira, 30 de dezembro de 2010 13:33
  • Olá Leandro,

    Conheço o Linq sim, mas apesar do intellissense ajudar muito, na prática, ele é um facilitador de consultas, por debaixo dos panos ele monta uma CAMQUERY. Meu ponto é que mesmo com ele eu não consigo instanciar um SPList direto com a query dele, do mesmo jeito que não estou conseguindo com a Camquery.

    O problema todo é pegar esse SPListItemCollection e "jogar" em um SPList ou ja instanciar um SPList  com esse filtro.

     

    Obrigado,

     

    Eduardo

    quinta-feira, 30 de dezembro de 2010 16:47