我已经尝试了阳光下的所有翻译服务来正确使用这种语法,但我仍然在 select 语句的第一部分(直到句号就在 groupby 关键字之前)
我试图在本地工作的在线示例中的原始 c# 语句:
public IEnumerable<TagGroup> GetTagGroups()
{
var tagGroups =
// extract the delimited tags string and session id from all sessions
DbSet.Select(s => new { s.Tags, s.Id })
.ToArray() // we'll process them in memory.
// split the "Tags" string into individual tags
// and flatten into {tag, id} pairs
.SelectMany(
s =>
s.Tags.Split(_tagDelimiter, StringSplitOptions.RemoveEmptyEntries)
.Select(t => new { Tag = t, s.Id })
)
// group {tag, id} by tag into unique {tag, [session-id-array]}
.GroupBy(g => g.Tag, data => data.Id)
// project the group into TagGroup instances
// ensuring that ids array in each array are unique
.Select(tg => new TagGroup
{
Tag = tg.Key,
Ids = tg.Distinct().ToArray(),
})
.OrderBy(tg => tg.Tag);
return tagGroups;
}
我在VB中最接近它:
Public Function GetTagGroups() As IEnumerable(Of TagGroup)
' extract the delimited tags string and session id from all sessions
' we'll process them in memory.
' split the "Tags" string into individual tags
' and flatten into {tag, id} pairs
' group {tag, id} by tag into unique {tag, [session-id-array]}
' project the group into TagGroup instances
' ensuring that ids array in each array are unique
Dim tagGroups = DbSet.[Select](Function(s) New With { _
s.Tags, _
s.Id _
}).ToArray().SelectMany(Function(s) s.Tags.Split(_tagDelimiter, StringSplitOptions.RemoveEmptyEntries).[Select](Function(t) New With { _
Key .Tag = t, _
s.Id _
})).GroupBy(Function(g) g.Tag, Function(data) data.Id).[Select](Function(tg) New With { _
Key .Tag = tg.Key, _
Key .Ids = tg.Distinct().ToArray() _
}).OrderBy(Function(tg) tg.Tag)
Return tagGroups
End Function
这导致 Visual Studio 2012 intellisense 将语句的第一部分从第一行的“DbSet”到靠近底部的“.GroupBy”之前的最后一个括号用蓝色下划线。错误是“重载解析失败,因为无法使用这些参数调用可访问的 'SelectMany'”。
由于这是一个代码示例,我正在尝试转换为 vb 以在本地运行并理解并且我对 linq 的经验不足,我完全不知道如何尝试和处理这个问题。这超出了我目前的理解,所以就我所知,可能是一个简单的语法错误或从头到尾的完整哈希!
非常感谢任何指点。