当前位置: 首页 > 编程语言 > C#

如何在不迭代的情况下将Linq结果转换为DTO类对象分享

时间:2023-04-10 16:28:38 C#

C#学习教程:如何在不迭代的情况下将Linq结果转换为DTO类对象WebAPI方法将返回复杂类型/对象的JSON表示。这些是我可以提供给第三方的预定义类,因此他们了解数据的结构,并且可以反序列化JSON。在有人纠正我之前,我会将这些类称为DTO类。我有以下自动生成的实体模型(来自数据库),它无论如何都是用户类与扫描表的关系(为了这个问题可以忽略关系)...publicpartialclassUser{publicUser(){this.Scans=newHashSet();}publicintId{得到;放;}publicstring用户名{get;放;}公共字符串密码{得到;放;}publicboolActive{get;放;}公共虚拟ICollection扫描{get;放;}}下面的DTO类我想以列表的形式返回到表现层(我不认为我应该使用IEnumerable进行业务表现?)。公共类用户{publicintId;公共字符串用户名;公共字符串密码;公共布尔活动;该组件的业务层目前看起来像这样。使用Linq从数据库中获取用户,然后解析结果并返回一个POCO用户列表。publicListGet(){ListuserList=newList();使用(vardb=newMyContext()){varquery=fromuindb.Usersorderbyu.FirstNameselectu;foreach(variteminquery){Useruser=newUser();user.Id=item.pkUser;user.Username=item.Username;user.Password=item.Password;user.Active=item.Active;userList.Add(用户);}}返回用户列表;像这样解析结果似乎效率低下,我已经看到你可以在Linq查询中做这种事情而无需迭代(例如回答问题MappingLinqqueryresultstoDTOclasses)。我不确定我应该在哪里/如何实现IEnumerable以在我的对象上启用这种类型的Linq查询,而且我也不确定如何编写类似于上面引用的问题中的查询,但对于我更简单的场景。在此先感谢您的帮助。PS请忽略我通过WebAPI公开用户名和密码的事实,以及我一次返回所有用户的事实。以上是我针对此问题的代码的简化版本。完整的方法可以是:publicListGet(){using(vardb=newMyContext()){return(fromuindb.Usersorderbyu.FirstNameselectnewUser(){Id=u.pkUser,Username=u.Username,Password=u.Password,Active=u.Active}).ToList();你说你想要“没有迭代”的结果。使用LINQ也不会消除迭代。您没有在代码中执行此操作,但在调用ToList()方法时确实会发生这种情况。您可以使用LINQtoObjects进行转换:returnquery.AsEnumerable().Select(item=>newUser{Id=item.pkUser,Username=item.Username,Password=item.Password,Active=item.Active}).ToList();如果我们使用AutoMapper,我们可以变得非常紧凑。在您的存储库中引导映射器:Mapper.CreateMap();然后它非常简单(并且返回IEnumerable没有任何问题)。publicIEnumerableGet(){using(vardb=newMyContext()){return(fromuindb.Usersorderbyu.FirstNameselectMapper.Map(u)).AsEnumerable();在我的查询中,我有多个孩子的父表。publicclassTeamWithMembers{publicintTeamId{get;放;}publicstringTeamName{get;放;}publicstringTeamDescription{get;放;}publicListTeamMembers{get;),它给出了错误。现在我在linq查询中使用匿名类型并将其转换为下一个查询.TeamMembers.ToList()}).ToList();其中teamMemberQueryResult是linq查询的结果集。以上就是C#学习教程:HowtoconvertLinqresultsintoDTOclassobjectswithoutiteration.如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: