you can't "copy" a field from sitecoll A to sitecoll B, you have to recreate it. The usual way to go about this is to actually use a feature that creates the lookup field, but that's not the case here I guess (should have been done at the start, in the future i suggest that's how you create fields, seeing how that method is reusable).
What you would need to do is in the SPSite object of the b sitecoll create a new field, using the original Field's field.SchemaXml
, this way you have all relevant info to recreate the field from scratch in the sitecoll b. you need to use the AddFieldAsXml
of the SPSite.Fields collection if you want to set the internalname of the new field since the InternalName property is read only.
Read how here
CHeck if field exist:
using(SPSite targetSite = new SPSite("urloftargetsite"))
{
using(SPWeb targetWeb = sourceSite.OpenWeb())
{
if(!targetWeb.Fields.ContainsField(originalField.InternalName))
{
targetWeb.Fields.AddFieldAsXml("caml string here");
}
}
}