2011-11-25 8 views
4

以前はSQL DB上で機能していたserachページを持っていましたが、今はback-enをSharePointに移動しました。ユーザー選択からドロップダウンボックスに基づいてクエリを作成しようとしています。 動的にCAMLクエリを作成します

string SQLquery "Select companyname,phone,email from Tab where Approved = 1" 

If (country.selectedindex != "") 
{ 
    SQLquery += "AND (country LIKE '%" + country.SelectedValue + "%')" 
} 
If (functional.selectedindex != "") 
{ 
    SQL += "AND (country LIKE '%" + country.SelectedValue + "%')" 
} 
If (state.selectedindex != "") 
{ 
    SQL += "AND (state LIKE '%" + state.SelectedValue + "%') OR (businessareaState like '%" + state.SelectedValue + "%'))" 
} 

この

は簡単だったが、私は、ドロップダウンリストを形成し、ユーザーの選択に基づいてCAMLで同じクエリを作成する必要があります。

既存のSQLクエリがしました。 何とか私はそれを追加するとすぐにCAMLの構造が完全に変化するので、それを動的な形にすることはできません。

ヘルプは高く評価されます。

+1

SharePoint 2010またはMOSS 2007?もし2010年あなたlinq見て?私はそれがより簡単になると思います。 – Shoban

+0

+1 LINQ to CAMLは素晴らしいかもしれませんが、魔法の落とし穴があります。http://www.sharepointblues.com/2010/09/08/linq-to-sharepoint-performance-pitfalls/ – Ryan

+0

私はまだ、私は間違いなくタイムリーに返信いただきありがとうございます:) – Vishal

答えて

2

あなたのCAMLの構築を支援するために、この無料のツールを使用することができますが

http://www.u2u.be/res/tools/camlquerybuilder.aspx

があなたのクエリにいくつかのバリエーションを行い照会し、あなたはどのような構造の変更が表示されます。基本的には、文字列連結を使用するのではなく、XML文書を構築する必要があります(XMLパーサでXML文書を構築する方が簡単かもしれません)。

+0

Ryan私はすでにそれを使用しています、それはちょっと難しいですが、私は動的なクエリで作業する最善の方法はハードコード追加するとすぐに構造全体が変更され、クエリに句が追加されるので、それだけです。 – Vishal

1

動的クエリを作成するためのC#コードを開発しました。この

public string GenerateQuery(IList<CamlQueryElements> lstOfElement) 
    { 
     StringBuilder queryJoin = new StringBuilder(); 
     string query = @"<{0}><FieldRef Name='{1}' /><Value {2} Type='{3}'>{4}</Value></Eq>"; 
     if (lstOfElement.Count > 0) 
     { 
      int itemCount = 0; 
      foreach (CamlQueryElements element in lstOfElement) 
      { 
       itemCount++; 
       string date = string.Empty; 
       // Display only Date 
       if (String.Compare(element.FieldType, "DateTime", true) == 0) 
        date = "IncludeTimeValue='false'"; 
       queryJoin.AppendFormat(string.Format(query, element.ComparisonOperators, 
           element.FieldName, date, element.FieldType, element.FieldValue)); 

       if (itemCount >= 2) 
       { 
        queryJoin.Insert(0, string.Format("<{0}>", element.LogicalJoin)); 
        queryJoin.Append(string.Format("</{0}>", element.LogicalJoin)); 
       } 
      } 
      queryJoin.Insert(0, "<Where>"); 
      queryJoin.Append("</Where>"); 
     } 
     return queryJoin.ToString(); 
    } 

よう そのIListのlstOfElementは、フィルタエレメントを保持しているカスタムオブジェクトです。独自のオブジェクトを作成し、このメソッドに渡すことができます。

関連する問題