我有一个linq表达式
Dim sources = details.Datasources _
.SelectMany(Function(s) _defs.Item(s.Name)) _
.Select(Function(d) New AliasedDatasource With {.Alias = "", .DefDetails = d}) _
.Where(Function(s) s.DefDetails.Dataview = dataview) _
.Select(Function(d) d)
注意:
我正在尝试
在第
行.Select(Function(d) New AliasedDatasource With {.Alias = "", .DefDetails = d}) _
我有效地尝试这样做
.Select(Function(d) New AliasedDatasource With {.Alias = s.Alias, .DefDetails = d}) _
但显然s.Alias对那个lambda是不可见的。
那么我应该如何重写这一点以实现我的目标。我想知道是否实际上SelectMany上有一个Overload,它允许我投射到一个新类型,但我正在努力解决它。
很多thx
取值
答案 0 :(得分:1)
行。所以我发现了重载并且它“简化”到了......
Dim sources = details.Datasources _
.SelectMany(Function(s) _defs.Item(s.Name).Where(Function(d) d.DataviewKey = dataview),
Function(s, d) New AliasedDatasource With {.Name = d.Name, .Alias = s.Alias, .Key = d.Key, .DataviewKey = d.DataviewKey})
THX
答案 1 :(得分:1)
查询语法是你的朋友:
Dim sources = From s In details.Datasources _
From d In _defs.Item(s.Name) _
Where s.DefDetails.Dataview = dataview _
Select New AliasedDatasource With { _
.Name = d.Name, _
.Alias = s.Alias, _
.Key = d.Key, _
.DataviewKey = d.DataviewKey _
}
From .. From
构造编译为SelectMany
。 Select
子句中的项目确定了哪个重载。