CAML 查询过滤不起作用
CAML query filtering is not working
我在谷歌上搜索过,它可以在查询格式不正确的情况下使用。但是我验证了几个小时,并没有发现任何错误。问题很常见:查询不过滤 returns 所有数据。
我不知道出了什么问题,因为我在 Stramit CAML 查看器中检查了这个查询,它工作正常。
private static SPListItemCollection GetItemsForThisUserAndEvent(SPList list)
{
const string queryMask =
@"<Where>
<And>
<Eq>
<FieldRef Name='{0}' LookupId='TRUE' />
<Value Type='Lookup'>{1}</Value>
<Eq>
<Eq>
<FieldRef Name='{2}' LookupId='TRUE' />
<Value Type='User'>{3}</Value>
<Eq>
</And>
<Where>";
var query = string.Format(queryMask, MemberListFieldLookupEventName, SPContext.Current.ListItem.ID,
MemberListFieldLogin, SPContext.Current.Web.CurrentUser.ID);
return list.GetItems(query);
}
接受字符串的 SPList.GetItems
的重载实际上是 this overload,它接受返回 时应返回的字段列表的 params string[]
参数该列表中的所有项目。它不期待 CAML 查询。
您需要将您的 CAML 填充到一个 SPQuery
对象中,然后将该 SPQuery
对象提供给 GetItems
:
list.GetItems(new SPQuery() { Query = query });
我在谷歌上搜索过,它可以在查询格式不正确的情况下使用。但是我验证了几个小时,并没有发现任何错误。问题很常见:查询不过滤 returns 所有数据。
我不知道出了什么问题,因为我在 Stramit CAML 查看器中检查了这个查询,它工作正常。
private static SPListItemCollection GetItemsForThisUserAndEvent(SPList list)
{
const string queryMask =
@"<Where>
<And>
<Eq>
<FieldRef Name='{0}' LookupId='TRUE' />
<Value Type='Lookup'>{1}</Value>
<Eq>
<Eq>
<FieldRef Name='{2}' LookupId='TRUE' />
<Value Type='User'>{3}</Value>
<Eq>
</And>
<Where>";
var query = string.Format(queryMask, MemberListFieldLookupEventName, SPContext.Current.ListItem.ID,
MemberListFieldLogin, SPContext.Current.Web.CurrentUser.ID);
return list.GetItems(query);
}
接受字符串的 SPList.GetItems
的重载实际上是 this overload,它接受返回 时应返回的字段列表的 params string[]
参数该列表中的所有项目。它不期待 CAML 查询。
您需要将您的 CAML 填充到一个 SPQuery
对象中,然后将该 SPQuery
对象提供给 GetItems
:
list.GetItems(new SPQuery() { Query = query });