1

同一の SharePoint リストが 2 つあります。私は C# を使用して一方をループし、SP オブジェクト モデルを使用して他方に追加しています。

問題は、from リストに一致する 3 つの特定のフィールドを持つリスト エントリが既に存在する場合、他に追加したくないことです。

C#でこれを行うにはどうすればよいですか? CAMLを使用していますか?

リストが from と to で呼び出され、フィールドが a、b、c と呼ばれているとします。

ここで、現在の from エントリに一致する a、b、c を持つエントリが既に to にある場合、「to」にエントリを追加したくありません。

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  
4

1 に答える 1

2

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
    }

もう1つの方法は、あなたが言及したように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 が複合一意キーを許可していないのは残念です。

別の角度から問題に取り組みたい場合は、そのリストにあるイベント レシーバーを使用して複合一意キーを強制することができます。

于 2012-08-08T01:05:10.913 に答える