我尝试编译代码时收到以下错误:
无法从用法中推断出方法'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.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();
Run Code Online (Sandbox Code Playgroud)
我不知道怎样才能"更进一步"这样做......
Sim*_*Var 22
问题是内在SelectMany不适用于那里,你可能意味着Select.
var argumentsVal = entries.SelectMany(entry =>
arguments.Select(arg => new RowArgumentVal())).ToList();
Run Code Online (Sandbox Code Playgroud)
每个entry将被映射到一个IEnumerable<RowArgumentVal>根据arguments.
想象一下,外部SelectMany是一个简单的Select,它会产生List<IEnumerable<RowArgumentVal>>.但是因为它是SelectMany,它会将结果"扁平化"成一个简单的结果List<RowArgumentVal>.
该SelectMany方法需要映射到IEnumerable<T>- 而不是T.如果RowArgumentVal恰好实现了IEnumerable<T>接口,那么您的原始代码将是有效的,我认为不是这种情况.
| 归档时间: |
|
| 查看次数: |
11970 次 |
| 最近记录: |