我有两个相同的SharePoint列表。我正在使用C#循环访问一个并使用SP对象模型添加到另一个。
问题是我不想添加到另一个,如果已经有一个列表条目,其中3个特定字段与from列表匹配。
如何在C#中做到这一点?使用CAML?
说我的名单是从和来调用的,字段叫做a,b和c。
在这里,我不想在“to”中添加条目,如果已经有一个条目,a,b和c匹配我当前的条目。
SPList fList = web.GetList("/sites/xxxx/Lists/from");
SPList tList = web.GetList("/sites/xxxx/Lab/Lists/to");
foreach (SPListItem fListItem in fList.Items)
{
// my caml code here i suspect?
//SPquery.query = "CAML";
//SPList<yourlist>.GetItems(SPQuery object)
SPListItem tListItem = tList.Items.Add();
foreach (SPField field in fList.Fields)
{
try
答案 0 :(得分:1)
我首先使用SPMetal(如果可能,LINQ To SharePoint)。
MyContext context = new MyContext(SPContext.Current.Web.Url);
var fItems = from f in context.FromList
select f;
foreach(FItem fitem in fItems)
{
var toFoundItems = from t in context.ToList
where t.Field1 == fitem.Field1 && t.Field2 == fitem.Field2 && t.Field3 == fitem.Field3
select t;
if(t.Count > 0)
continue;
else
//Code to add items can use context to do this here also
}
另一种方式就像你提到并使用SPQuery一样。
SPQuery query = new SPQuery();
query.Query = string.format("
<Where>
<AND>
<Eq>
<FieldRef Name='Field1' />
<Value Type='Text'>{0}</Value>
</Eq>
<And>
<Eq>
<FieldRef Name='Field2' />
<Value Type='Text'>{1}</Value>
</Eq>
<Eq>
<FieldRef Name='Field3' />
<Value Type='Text'>{2}</Value>
</Eq>
</And>
</And>
</Where>");
SPListItemCollection items = tList.GetItems(query);
if(items.Count > 0)
continue;
else
//Code to add item
我不在我的普通PC上,所以我无法测试这些代码中的任何一个但是应该让你知道如何启动,不幸的是SharePoint不允许使用复合唯一键。
如果您想从不同角度处理问题,可以在该列表上使用事件接收器强制执行复合唯一键。