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

无法将匿名列表转换为LINQ中的已知列表分享

时间:2023-04-10 13:24:45 C#

C#学习教程:无法在LINQ中将匿名列表转换为已知列表我需要将它转换为这个表模型的列表。groupManager的匿名类型是Lista>其中a是{Groupg5}vargroups=newList();vargroupManager=(fromaindb.AUsersjoinbindb.BUsersona.Idequalsb.UserIDintogroup1fromg1ingroup1.DefaultIfEmpty()joincindb.UserRolesong1.IDequalsc.UserIDintogroup2从g2ingroup2.DefaultIfEmpty()joindindb.Rolesong2.RoleIDequalsd.IDintogroup3fromg3ingroup3.DefaultIfEmpty()joineindb.RoleGroupsong3.IDequalse.RoleIDintogroup4fromg4在group4.DefaultIfEmpty()中joinfindb.Groupsong4.GroupIDequalsf.IDintogroup5fromg5ingroup5.DefaultIfEmpty()wherea.Id==user.ID&&g5.Name!=""selectnew{组=g5}).ToList();groups=groupManager.Cast().ToList();这段代码似乎没有启动。我得到的错误是{“无法将类型为‘f__AnonymousType11`1[Group]’的对象转换为类型‘Group’。“}我错过了什么?嗯......你会试试这个吗?选择新组(g5))。ToList();或这个选择g5)。ToList();很难说更多。你可以在没有匿名的情况下这样做typesorcasts.vargroups=(fromaindb.AUsers//Yourquery...selectnewGroup{//PropertiesofGroupName=g5.Name,AnotherProperty=g5.AnotherProperty}).ToList();答案provided是绝对正确的,但我认为指出有关Cast方法的一个微妙之处(并回答“我错过了什么”部分)可能会很好……Cast方法确实用于转换列表中的所有对象到另一种类型。毫不奇怪,编译器会抛出此异常,因为所有Cast所做的都是采用IEnumerable(非泛型版本)并返回相同的集合,但使用泛型IEnumerable。这是LINQ中采用的两种方法之一一个非泛型IEnumerable作为参数(第二个是OfType),因此您可以拥有给定类型的集合,将其转换为IEnumerable并使用其他需要IEnumerable的LINQ方法将IEnumerable作为参数。看看源代码publicstaticIEnumerableCast(thisIEnumerablesource){IEnumerabletypedSource=sourceasIEnumerable;if(typedSource!=null)返回typedSource;如果(source==null)throwError.ArgumentNull("source");返回CastIterator(源);}并在CastIteratorforeach(源代码中的对象obj)中yieldreturn(TResult)obj;因此您的收藏应该能够转换为给定类型T以使Cast正常工作。它不会将您的匿名类型转换为具体类型。如果您选择实际对象,那么您得到的是Group的IEnumerable:vargroups=newList();vargroupManager=(fromaindb.AUsersjoinbindb.BUsersona.Idequalsb.UserIDintogroup1fromg1ingroup1.DefaultIfEmpty()joincindb.UserRolesong1.IDequalsc.UserIDintogroup2从g2ingroup2.DefaultIfEmpty()joindindb.Rolesong2.RoleIDequalsd.IDintogroup3fromg3ingroup3.DefaultIfEmpty()joineindb.RoleGroupsong3.IDequalse.RoleIDintogroup4fromg4在group4.DefaultIfEmpty()中加入findb.Groupsong4.GroupID等于f.ID从g5ingroup5ingroup5.DefaultIfEmpty()wherea.Id==user.ID&&g5.Name!=""selectg5).ToList()groups=groupManager;然后.ToList()会将其转换为列表。无需创建动态对象然后进行转换。以上是C#学习教程:匿名列表在LINQ中无法转换为已知列表。分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: