c# - 动态创建 CAML 查询

标签 c# asp.net web-services sharepoint

我有一个搜索页面,之前在 SQL DB 上运行,但现在我们将后台转移到 SharePoint,我正在尝试根据用户从下拉框中选择的内容构建查询。

现有的 SQL 查询是:

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 中创建相同的查询。 不知怎的,我无法给它一个动态的形状,因为一旦你在其中添加和条件,结构就会在 CAML 中完全改变。

非常感谢您的帮助。

最佳答案

我开发了 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 是包含过滤器元素的自定义对象。您可以创建自己的对象并传递给此方法。

关于c# - 动态创建 CAML 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267515/

相关文章:

c# - Dispatcher.BeginInvoke c#,silverlight

c# - 为属性创建委托(delegate)时无法绑定(bind)到目标方法

asp.net - 基于浏览器(免费使用)的 SSH

java - 调用soap webservice时出现异常

c# - DiscardableAttribute 有什么用?

c# short if 语句不适用于 int? (整数=空)

c# - 在未授权 .net core 时覆盖 redirecturl

c# - 无法从 aspx 页面获取值到 aspx.cs

python-3.x - 多个相同进程的 Gunicorn 高内存使用率?

java - 如何使用基于 REST 的应用程序实现在线/离线功能?