所以这是设置
您有一个命名空间 DAL 和一个命名空间 DTO(在不同的程序集中)。两者都包含一个类 Foo。我试图做的是在 DTO 类型上指定 EF 包含并将它们转换为 DAL 类型。
我们有以下来自前端的集合:
using DTO;
public class GetFooById : Request
{
    public GetFooById()
    {
        IncludeProperties = new HashSet<Expression<Func<object, object>>>
                    {
                        x  => ((Foo)x).Bar, //DTO.Foo, when debugging is DAL.Foo
                        x => ((Foo)x).Foobars,
                    };
    }
}
我们在另一个程序集中使用这个集合,如下所示:
IQueryable<object> query = Context.Foos;
foreach (var expr in request.IncludeProperties)
{
        query = query.Include(expr);
}
var foo = query.First(x => x.Id == request.Id);
奇怪的是,这段代码正在编译和执行,但包含的属性为空。当我调试并将鼠标悬停在这部分上时:x  => ((Foo)x).Bar调试器说Foo是类型:DAL.Foo 而不是包含的 DTO.Foo。
这是因为表达式编译在一个文件中,我们没有包含到 DTO,但我们有一个包含到 DAL?这不是 c# 中的错误吗?
这是 C# 中的预期行为吗?
项目框架是 4.0,但我正在安装 4.5 进行编译。