【发布时间】:2015-06-17 18:15:15
【问题描述】:
我正在尝试从每组行中获取一个随机行。我正在尝试使用 LINQ,但我不确定这是否是正确的方法。我想要一个键/名称对字典。
我的桌子是这样的:
AnswerGroup AnswerKey AnswerName
---------------------------------------------
1 1 Yes
1 2 No
2 1 Never
2 2 A little bit
2 3 Mostly
2 4 Always
3 1 White
3 2 African American
3 3 Hispanic
3 4 Asian or Pacific Islander
对于每个 AnswerGroup,我需要选择一个随机的密钥/名称对。
我开始使用 LINQ 查询,但坦率地说,我迷路了,因为我不了解 LINQ 分组以及如何将 Enumerable.Take(1) 添加到组中。
Dim answerGroup As String = "AnswerGroup"
Dim answerKey As String = "AnswerKey"
Dim answerName As String = "AnswerName"
Dim query = _
From rows As DataRow In surveyAnswerKeys.Rows _
Order By rows(answerGroup) _
Group By questionSortKey = rows(answerGroup) _
Into questionGroups = Group
任何帮助将不胜感激。谢谢!
编辑: 我可以在调试器中展开以下查询,以查看生成一系列 DataRows 的 In Memory Query。当我将鼠标悬停在 questionGroups 上时,它说它是一个 IEnumerable(Of Object)。当我尝试将该查询运行到列表或 DataTable 中时,出现错误:
“类型‘WhereSelectEnumerableIterator(Of VB$AnonymousType_0(Of Object,IEnumerable(Of Object)),Object)' 不是 找到了。”
Dim answerGroup As String = "QuestionSortKey"
Dim answerNo As String = "AnswerNo"
Dim surveyDefinitionNo As String = "Pk_SurveyDefinitionNo"
Dim query = _
From rows In surveyAnswerKeys.Rows _
Where rows(answerNo) IsNot Nothing _
Order By Guid.NewGuid() _
Group By questionSortKey = rows(answerGroup) _
Into questionGroups = Group _
Select questionGroups.First()
Dim randomAnswerNos As DataTable = query.ToTable
【问题讨论】: