Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AutoMapper和Entity Framework更改从数据库表中获取的列_C#_Entity Framework 6_Automapper_Iqueryable_Automapper 8 - Fatal编程技术网

C# 使用AutoMapper和Entity Framework更改从数据库表中获取的列

C# 使用AutoMapper和Entity Framework更改从数据库表中获取的列,c#,entity-framework-6,automapper,iqueryable,automapper-8,C#,Entity Framework 6,Automapper,Iqueryable,Automapper 8,我们有一个新的需求,需要从表中动态获取列列表。我们在这个表中有141列,但是如果我们只想返回其中的2或3列,我们只是在运行时之前不知道是哪3列 这些列作为列表传入,希望我可以使用反射来访问源对象上的属性 我们已经能够通过将TObjectDto传递到我们的服务中来支持这一点,我们的IQueryable在访问数据库之前就被投射到了服务中,它只是不处理等式的动态列部分 到目前为止,我还无法使用MapFrom做类似的事情(运气不好,因为反射在LINQ中不受支持,它必须是LINQ,否则queryable不

我们有一个新的需求,需要从表中动态获取列列表。我们在这个表中有141列,但是如果我们只想返回其中的2或3列,我们只是在运行时之前不知道是哪3列

这些列作为
列表
传入,希望我可以使用反射来访问源对象上的属性

我们已经能够通过将
TObjectDto
传递到我们的服务中来支持这一点,我们的
IQueryable
在访问数据库之前就被投射到了服务中,它只是不处理等式的动态列部分

到目前为止,我还无法使用MapFrom做类似的事情(运气不好,因为反射在LINQ中不受支持,它必须是LINQ,否则queryable不支持它)


有什么理由让我继续钻这个兔子洞,而仅仅使用我必须的来生成一些原始SQL吗?

我找到了一个我非常满意的解决方案

我声明了一个直接从模型类继承的Dto类

    public class MyObjectDto : MyObject
    {
    }
然后像这样配置自动映射配置文件

CreateMap<MyObject, MyObjectDto>()
            .ForAllMembers(s => s.ExplicitExpansion());
CreateMap()
.ForAllMembers(s=>s.ExplicitExpansion());
然后我整理了我想要检索的字段列表,并

                result = await myObjects
                    .ProjectTo<TMyObjectDto>(_mapperConfiguration, null, fieldsToRetrieve.ToArray())
                    .ToListAsync().ConfigureAwait(false);
result=wait myObjects
.ProjectTo(_-mapperConfiguration,null,fieldstoretrive.ToArray())
.ToListSync().ConfigureAwait(false);
然后,这只查询数据库值以查找
fieldstoretrive
中的属性,其余为空/默认值,非常适合我的需要


感谢Lucian在评论中为我指出了正确的方向

在我看来,您的数据库设计对于此应用程序来说是错误的。我没有异议,这在某种程度上是我们应用程序的核心,并且非常庞大(在列和数据中),您需要80个不同的查询,您需要通过字符串进行选择(列名或其他最好的名称)。字典之类的东西怎么样?