O Automapper falha ao projetar IQueryable <objeto> quando o objeto possui uma propriedade de coleta
Então, aqui está minha situação. Eu tenho minhas duas classes:
class FromClass
{
public string[] Foo { get; set; }
}
class ToClass
{
public string[] Foo { get; set; }
}
As classes têm propriedades que são matrizes. Eles poderiam serList<T>
ouIEnumerable<T>
, Eu recebo o mesmo resultado em qualquer um desses casos.
Eu tento mapear de um para o outro usando oAutoMapper.QueryableExtensions
:
class Program
{
static void Main(string[] args)
{
// create a "From" object
string[] anArray = new string[] { "a", "b" };
FromClass anObject = new FromClass() { Foo = anArray };
// make a queryable set that includes the "From" object
IQueryable<FromClass> queryableObjects = (new FromClass[] { anObject }).AsQueryable();
// set up AutoMapper
Mapper.CreateMap<FromClass, ToClass>();
Mapper.AssertConfigurationIsValid();
// test plain mapping
IQueryable<ToClass> test1 = queryableObjects.Select(o => Mapper.Map<FromClass, ToClass>(o));
// success!
// test queryable extensions
IQueryable<ToClass> test2 = queryableObjects.Project().To<ToClass>();
// InvalidOperationException: "Sequence contains no elements"
}
}
Por que o test2 lança umInvalidOperationException
? Se eu fizer o tipo deFoo
algo que não é uma coleção, por exemplo umastring
ou alguma outra classe - então tudo funciona perfeitamente.
Estou fazendo algo errado? Não entendendo alguma coisa? Ou eu acertei um bug?