2010-06-07 64 views
0

我在Sharepoint中有一个自定义搜索webpart,它有7个过滤器。我正在使用CAML查询从Sharepoint列表中获取数据。我想编写一个广义的SPQuery,它将根据搜索参数筛选出数据。搜索参数是可选的。如果用户输入任何2个参数,那么我需要获取与这2个参数相对应的数据。我如何使用CAML Query来实现这一点?我无法思考了基于搜索参数生成我CAML查询广义办法的..如何在sharepoint中使用可选搜索值的caml查询

+0

你能举一个例子,说明输入可能是什么样子?您还需要参数之间的一些逻辑,您允许的选项有哪些? – 2010-06-07 20:54:53

+0

我实际上通过编写逻辑来动态生成spquery来解决问题 – 2010-06-08 16:41:27

回答

0

实际上写的逻辑来动态生成spquery

1

这里解决的问题是一些代码我在Silverlight中使用基于搜索参数生成CAML查询。 也许它是有帮助的。

private ClientContext context; 
    private Microsoft.SharePoint.Client.List SampleSPList; 
    private Microsoft.SharePoint.Client.ListItemCollection SampleSPCollection; 

    //Load the List 
    void LoadList() 
    { 
     SampleSPList = context.Web.Lists.GetByTitle("Sample"); 
     context.Load(SampleSPList); 

     CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery(); 

     string camlQueryXml = ""; 
     bool existsWhere = false; 

     if (searchString.Text != "") 
     { 
      camlQueryXml = camlQueryXml + "<Contains><FieldRef Name='sampleString' /><Value Type='Text'>" + searchString.Text + "</Value></Contains>"; 
      if (existsWhere == true) { 
       camlQueryXml = "<And>" + camlQueryXml + "</And>"; 
      } 
      existsWhere = true; 
     } 

     if (searchTextArea.Text != "") 
     { 
      camlQueryXml = camlQueryXml + "<Contains><FieldRef Name='sampleTextArea' /><Value Type='Text'>" + searchTextArea.Text + "</Value></Contains>"; 
      if (existsWhere == true) 
      { 
       camlQueryXml = "<And>" + camlQueryXml + "</And>"; 
      } 
      existsWhere = true; 
     } 

     if (existsWhere == true) { camlQueryXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy><Where>" + camlQueryXml + "</Where></Query></View>"; } 
     else { camlQueryXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy></Query></View>"; } 

     query.ViewXml = camlQueryXml; 

     SampleSPCollection = SampleSPList.GetItems(query); 
     context.Load(SampleSPCollection); 
     context.ExecuteQueryAsync(ListLoaded, ListLoadFailed); 
    }