我有一个搜索页面,之前在 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/