我无法在我的.net csom应用程序中使用join创建一个有效的查询。我正在使用这篇文章:
http://msdn.microsoft.com/en-us/library/ff798388.aspx
这是我的代码:
ClientContext context = new ClientContext(url);
Web web = context.Web;
var list = web.Lists.GetByTitle("Esemény");
CamlQuery cq = new CamlQuery();
cq.ViewXml= @"<View>
<ViewFields>
<FieldRef Name='Title' />
</ViewFields>
<ProjectedFields>
<Field Name='PartnerLookupTitle' Type='Lookup' List='PartnerLookup' ShowField='Title' />
</ProjectedFields>
<Joins>
<Join Type='LEFT' ListAlias='PartnerLookup'>
<Eq>
<FieldRef Name='Partner' RefType='ID' />
<FieldRef List='Partner' Name='ID' />
</Eq>
</Join>
</Joins>
</View>";
ListItemCollection lista = list.GetItems(cq);
context.Load(lista);
context.ExecuteQuery();
我从服务器获得异常: &#34;价值不在预期范围内。&#34;
如果我删除了CAML查询的ProjectedFields和Joins部分,它可以工作:(
答案 0 :(得分:0)
在执行CAML SPQuery时,联接不常用。作为一种解决方法,两个列表中的数据可以单独拉出两个
List<SpListItem>
用于检查的对象,然后您可以在两个列表之间进行内存中连接。
答案 1 :(得分:0)
由于格式错误的CAML查询而发生此错误,特别是:
ListAlias
元素的Join
属性的值应包含列表名称List
元素的Field
属性的值应包含列表名称以下方法演示了如何构建List Joins and Projections的查询:
public static CamlQuery CreateJoinQuery(string joinListTitle,string joinFieldName,string[] viewdFields,string[] projectedFields)
{
var qry = new CamlQuery();
qry.ViewXml = @"<View>
<ViewFields>";
foreach(var f in viewdFields) {
qry.ViewXml+= string.Format("<FieldRef Name='{0}' />",f);
}
foreach(var f in projectedFields) {
qry.ViewXml+= string.Format("<FieldRef Name='{0}{1}' />",joinListTitle,f);
}
qry.ViewXml+= @"</ViewFields>
<ProjectedFields>";
foreach(var f in projectedFields){
qry.ViewXml+= string.Format("<Field Name='{0}{1}' Type='Lookup' List='{0}' ShowField='{1}' />",joinListTitle,f);
}
qry.ViewXml+= string.Format(@"</ProjectedFields>
<Joins>
<Join Type='LEFT' ListAlias='{0}'>
<Eq>
<FieldRef Name='{1}' RefType='ID' />
<FieldRef List='{0}' Name='ID' />
</Eq>
</Join>
</Joins>
</View>",joinListTitle,joinFieldName);
return qry;
}
假设以下列表:
Contacts
- 包含国家/地区查询字段(目标列表:国家/地区)Countries
然后,以下示例演示了如何从两个列表中检索列表项。
<强>用法强>
var listTitle = "Contacts";
var joinListTitle = "Countries";
var joinFieldName = "Country";
var projectedFields = new []{"ID","Title"};
var viewFields = new[] { "Title" };
using (var ctx = new ClientContext(webUri))
{
var list = ctx.Web.Lists.GetByTitle(listTitle);
var qry = CreateJoinQuery(joinListTitle,joinFieldName,viewFields,projectedFields);
var items = list.GetItems(qry);
ctx.Load(items);
ctx.ExecuteQuery();
}