I encountered a similar problem. I had a report running of a list of CustomObject. The CustomObject list was populated from a query on a list of ParentObjects that contained many-many references to all their CustomObjects. The relationship was removed and a string column was used on the ParentObject (ParentObject.CustomObjectName) instead. Now my report receives a string[] containing all the CustomObject names.
My solution was creating a wrapper object with a single string property and a constructor to use as my data source. I named it just like the CustomObject my report was expecting.
class CustomObject
{
public string Name {get; set;}
public CustomObject(string name)
{
Name = name;
}
}
I load my list using LINQ, I call the wrapper constructor in the select statement
var wrappedObjects = from parent in GetParentObjects()
select new CustomObject(parent.CustomObjectName);
From the report you can add a data source for the CustomObject class like you normally would and access the object as usual "=Fields!Name.Value".