当我尝试编译代码时出现以下错误:
方法的类型参数
'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,
系统.Func>)'
无法从用法推断。尝试指定类型参数
明确地。
List<RowEntry> entries = ...
List<RowArgument> arguments = ...
var argumentsVal = entries.SelectMany((RowEntry entry) =>
(IEnumerable<RowArgumentVal>)arguments.SelectMany((RowArgument arg) =>
new RowArgumentVal()
{
Action = "X"
, EntryID = entry.ID
, ArgID = arg.ID
, Val_BIT = true
, Val_DATE = new DateTime(2014, 01, 04)
, Val_DATETIME = new DateTime(2014, 01, 04)
, Val_DECIMAL = 4.6M
, Val_INT = 88
, Val_TIME = new TimeSpan(6, 0, 0)
}
).Cast<RowArgumentVal>()).Cast<RowArgumentVal>().ToList();
我不明白如何进一步“输入”这个......
问题是内在SelectMany
在那里不适用,你可能的意思是Select
.
var argumentsVal = entries.SelectMany(entry =>
arguments.Select(arg => new RowArgumentVal())).ToList();
Each entry
将被映射到IEnumerable<RowArgumentVal>
根据arguments
.
想象一下外部SelectMany
是一个简单的Select
,它会生成List<IEnumerable<RowArgumentVal>>
。但因为它是SelectMany
,它将结果“扁平化”为一个简单的List<RowArgumentVal>
.
The SelectMany
方法期望映射到IEnumerable<T>
- not T
。您的原始代码在以下情况下有效:RowArgumentVal
恰好实施了IEnumerable<T>
接口,我认为情况并非如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)