C# 当对象具有集合属性时,自动映射在投影IQueryable时失败

C# 当对象具有集合属性时,自动映射在投影IQueryable时失败,c#,.net,automapper,C#,.net,Automapper,这是我的情况。我在两门课上都有一门课: class FromClass { public string[] Foo { get; set; } } class ToClass { public string[] Foo { get; set; } } 这些类的属性是数组。它们可以是列表或IEnumerable,我在任何情况下都会得到相同的结果 我尝试使用AutoMapper.QueryableExtensions从一个映射到另一个: 为什么test2抛出InvalidOper

这是我的情况。我在两门课上都有一门课:

class FromClass
{
    public string[] Foo { get; set; }
}

class ToClass
{
    public string[] Foo { get; set; }
}
这些类的属性是数组。它们可以是列表或IEnumerable,我在任何情况下都会得到相同的结果

我尝试使用AutoMapper.QueryableExtensions从一个映射到另一个:

为什么test2抛出InvalidOperationException?如果我将Foo类型设置为非集合的类型,例如字符串或其他类,那么一切都可以完美地工作


我做错什么了吗?不懂什么?还是我碰到了一个bug?

我会说:这是一个bug:看

AutoMapper.QueryableExtensions在内部使用Mapper.CreateMapExpression,因此如果您编写:

var expression = Mapper.CreateMapExpression<FromClass, ToClass>();

您可以对上述问题进行评论,也可以用您的代码创建一个新的问题。这是一个很好的错误再现

啊,这正是问题所在。非常感谢。只要存在显式的CreateMap调用,使用复杂类型确实可以工作,而在普通映射的情况下似乎不需要显式的CreateMap调用。同时,使用复杂类型列表的变通方法也很好。再次干杯!嗯,github的问题已经解决了。不幸的是,这看起来像是一个WontFix。
var expression = Mapper.CreateMapExpression<FromClass, ToClass>();
public class FromClass
{
    public List<Item> Foo { get; set; }
}

public class ToClass
{
    public List<Item> Foo { get; set; }
}

public class Item
{
    public string Bar { get; set; }
}

var list =  new List<Item> { new Item{ Bar = "a"}, new Item() { Bar= "b" }};
FromClass anObject = new FromClass() { Foo = list };
var queryableObjects = (new FromClass[] { anObject }).AsQueryable();
Mapper.CreateMap<FromClass, ToClass>();
Mapper.CreateMap<Item, Item>();
var test2 = queryableObjects.Project().To<ToClass>().ToArray();