LINQ ToDictionary来自匿名对象的枚举

时间:2018-09-13 20:51:49

标签: c# linq

此LINQ语句中的ToDictionary()方法调用需要参数。按照目前的情况,ToDictionary部分是红色的,因为缺少更好的技术术语。错误:没有重载接受0个参数。是的,我知道。

我无法将lambda添加到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有效

1 个答案:

答案 0 :(得分:1)

您需要完全省略通用类型,如下所示:

.ToDictionary(x => x.Prop, x => x.Att);

原因是扩展方法将不需要两个,而是三个泛型:一个用于“ this”参数,另外两个用于“ regular”参数-否则,因为编译器可以从这些参数派生类型

您可以明确指定所有3种类型,但这几乎没有用,因为它们可以自动派生。