Below code helps in copying listitems from one sharepoint list to another along with attachments and permissions



/// <summary>

/// Function copies list item from source list to destination list in folder named '2015'

/// </summary>

/// <param name="web"></param>

/// <param name="sourceListName"></param>

/// <param name="destListName"></param>

/// <returns></returns>



private int CopyItems(SPWeb web, string sourceListName, string destListName)

{



//Get Source List

SPList sourceList = web.Lists[sourceListName];

//Get Destination List

SPList destList = web.Lists[destListName];

//Initiate variables

SPListItem folderListItem = null;

web.AllowUnsafeUpdates = true;

bool IsFolderExist = false;

int itemCount=0;

try

{

      //Check if list already contains folder name '2015'

      foreach (SPListItem item in destList.Folders

      {

         if (item.Title == "2015")

         {

            //set the folder name

            folderListItem = item;

            IsFolderExist = true;

         }

      }

          //If folder dows not exist

           if (!IsFolderExist)

          {

           /* Path within the list where the new folder gets created Leave it empty if it needs to be created under root */           

           String nodeDepthPath = @"";

           /* create a folder under the path specified */

           SPListItem folderItem = destList.Items.Add(destList.RootFolder.ServerRelativeUrl + nodeDepthPath, SPFileSystemObjectType.Folder);

           /* set the folder name and update */

           folderItem["Title"] = ddlYear.SelectedValue;

           folderItem.Update();

           folderListItem = folderItem;

          }

          //Get Desired list items

          SPQuery myQuery = new SPQuery();

          /*Form Query if required*/

          //Get lists item to copy

          SPListItemCollection sourceListItems = sourceList.GetItems(myQuery);

          foreach (SPListItem item in sourceListItems)

          {

             //Call Copy list items to copy data

             CopyItem(item, destList, folderListItem);

             itemCount++;

          }

}

catch (Exception ex)

{

         lblErrorMessage.Text = ex.Message;

         lblErrorMessage.ForeColor = Color.Red;

}

return itemCount;

 }


 /// <summary>

/// Function Copies data

/// </summary>

/// <param name="item"></param>

/// <param name="destList"></param>

/// <param name="DestinationfolderItem"></param>

private void CopyItem(SPListItem item, SPList destList, SPListItem DestinationfolderItem)

{

   //Create new list item in destination folder

    SPListItem newItem = destList.Items.Add(DestinationfolderItem.Folder.ServerRelativeUrl, SPFileSystemObjectType.File);

    //Set variable for copying attachments

    bool IsItemsAttached = false;

    try

    {

     //Iterate through all fields of source list item

      for (int i = 0; i < item.Fields.Count - 1; i++)

     {

         //Copy field to new item if they are not read only fields

        if ((!newItem.Fields[i].ReadOnlyField) && (newItem.Fields[i].InternalName != "Attachments"))

         {

          newItem[newItem.Fields[i].InternalName] = item[newItem.Fields[i].InternalName];

         }



      //Copy attachments

      else if (newItem.Fields[i].InternalName != "Attachments" && !IsItemsAttached)

      {

        if (newItem.Fields[i].InternalName == "Created")

        {    

           newItem["Created_x0020_Date0"] = item[newItem.Fields[i].InternalName];

         }

         foreach (string filename in item.Attachments)

         {    

          var file = item.ParentList.ParentWeb.GetFile(item.Attachments.UrlPrefix + filename);

          var imageData = file.OpenBinary();

          newItem.Attachments.Add(filename, imageData);

          IsItemsAttached = true;

        }

     }

}

newItem.Update();

 //Call Function to copy permission

CopyPermission(item, newItem); }

catch (Exception ex)

{

lblErrorMessage.Text = ex.Message;

lblErrorMessage.ForeColor = Color.Red;

 }

}

 /// <summary>

/// Function Copies permission

/// </summary>

/// <param name="destList"></param>

/// <param name="DestinationfolderItem"></param>

private void CopyPermission(SPListItem sourceItem, SPListItem destItem)

{

     //Get role assignment of source list item

     foreach (SPRoleAssignment roleAssign in sourceItem.RoleAssignments)

    {

     SPSecurity.RunWithElevatedPrivileges(delegate

     {

     if (destItem != null)

     { 

       //Assign role in destination list item

        destItem.BreakRoleInheritance(false); destItem.RoleAssignments.Add(roleAssign);

     }

});

}

}