LINQ ToDictionary 来自匿名对象的枚举

此 LINQ 语句中的 ToDictionary() 方法调用需要参数。就目前而言,ToDictionary 部分是红色波浪线,因为缺乏更好的技术术语。错误:没有重载需要 0 个参数。是的,我知道。


我无法将 lambdas 添加到 ToDictionary 方法调用,因为 Intellisense 正在用它的建议覆盖我的 lambda。换句话说,如果我输入“x”,它会用 XmlReader 替换它。啊。


我已经尝试过使用和不使用 AsEnumerable。我从 StackOverflow 帖子中借用了大部分代码,但我添加了字典部分。


我在某处缺少括号还是什么?哈哈!


var props = (from p in _type.GetProperties()

             let attr = p.GetCustomAttribute<ExcelExportAttribute>()

             where attr != null && attr.ReportId.ToString() == reportID

             select new {Prop = p, Att = attr })

             .AsEnumerable()

             .ToDictionary<PropertyInfo, ExcelExportAttribute>();

VS 中的错误

严重性代码描述项目文件行抑制状态错误 CS1929“IEnumerable<>”不包含“ToDictionary”的定义,最佳扩展方法重载“Enumerable.ToDictionary(IEnumerable,Func,IEqualityComparer)”需要“IEnumerable”类型的接收器WFG.UtilityLib.Excel C:\Users\kbessel\source\repos\WFG.UtilityLib.Excel\WFG.UtilityLib.Excel\ExcelExport.cs 142 活动


梦里花落0921
浏览 200回答 2
2回答

莫回无

您需要完全省略泛型类型,如下所示:.ToDictionary(x&nbsp;=>&nbsp;x.Prop,&nbsp;x&nbsp;=>&nbsp;x.Att);原因是扩展方法不需要两个而是三个泛型类型:一个用于“this”参数,另外两个用于“常规”参数 - 或者没有,因为编译器可以从参数派生类型。您可以显式指定所有 3 种类型,但这几乎没有任何用途,因为它们可以自动派生。

慕田峪7331174

我无法在ToDictionary方法调用中添加 lambda,因为 Intellisense 用它的建议覆盖了我的 lambda。换句话说,如果我输入“x”,它将替换为XmlReader.这是一个需要克服的简单问题:输入x,然后按下Esc关闭 Intellisense 下拉菜单。根据需要继续键入表达式:var props = _type.GetProperties()&nbsp; &nbsp; .SelectMany(p => new {Prop = p, Attr = p.GetCustomAttribute<ExcelExportAttribute>()})&nbsp; &nbsp; .Where(p => p?.ReportId?.ToString() == reportId)&nbsp; &nbsp; .ToDictionary(p => p.Prop, p => p.Attr);
打开App,查看更多内容
随时随地看视频慕课网APP