使用System.Linq.Dynamic分组时Select子句遇lambda转string错误
解决System.Linq.Dynamic中Select子句的Lambda转换错误
这个问题的核心是你混淆了原生Linq的Select方法和System.Linq.Dynamic扩展的Select方法的用法——Dynamic版本的Select不接受普通Lambda表达式,它要求传入一个字符串形式的动态表达式。
错误原因分析
你写的.[Select](Function(grp) grp.ToList())是原生Linq的写法,但System.Linq.Dynamic的Select方法签名是IQueryable Select(string selector),它期望的是字符串格式的表达式(比如"ToList()"),而不是Func<DynamicGrouping, List<YourType>>这样的委托,所以编译器会抛出"lambda expression cannot be converted to 'string'"的错误。
修正后的代码
只需要把Lambda替换成对应的动态表达式字符串即可:
Dim lstGroupedFilterNew = lstDataSource _ .GroupBy("New (Unit_ID, Itinerary_ID, Driver_ID)", "grp") _ .[Select]("ToList()") _ .ToList()
进阶用法(如果需要自定义分组结果)
如果你想把分组转换成包含键和子列表的自定义对象,也可以直接在字符串表达式里定义:
Dim lstGroupedFilterNew = lstDataSource _ .GroupBy("New (Unit_ID, Itinerary_ID, Driver_ID)", "grp") _ .[Select]("New { GroupKey = Key, Items = ToList() }") _ .ToList()
这样就能正确生成嵌套的列表结构,同时符合System.Linq.Dynamic的语法要求。
内容的提问来源于stack exchange,提问作者Renan Barbosa
相关产品推荐
相关产品推荐

