У меня есть этот код здесь:LINQ группы по с агрегатной функцией (метод синтаксис)
Dim result As IEnumerable(Of Object())
Dim dt As New DataTable
Dim indexes As New List(Of Integer)
Dim groupedindexes As New List(Of Integer)
Dim datarows As New List(Of DataRow)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
dt.Columns.Add("f1", Type.GetType("System.Char"))
dt.Columns.Add("f2", Type.GetType("System.Char"))
dt.Columns.Add("f3", Type.GetType("System.Char"))
dt.Columns.Add("f4", Type.GetType("System.Int32"))
For i = 0 To 100
dt.Rows.Add("a", "b", "c", i * 2)
Next
indexes.Add(0)
indexes.Add(1)
indexes.Add(2)
indexes.Add(3)
groupedindexes.Add(0)
groupedindexes.Add(1)
groupedindexes.Add(2)
For i = 0 To dt.Rows.Count - 1
datarows.Add(dt.Rows(i))
Next
result = datarows.Select(Function(row) indexes.Select(Function(index) row(index)).ToArray)
'select sum(f4), f1, f2, f3 from t1 group by f1, f2, f3
Dim test = result.GroupBy(Function(Key) groupedindexes.Select(Function(groupedindex) Key(groupedindex)).ToArray,
Function(Result) indexes.Select(Function(index) Result(index)).ToArray)
End Sub
Я пытаюсь группа по методу/функции. С приведенным выше кодом мне удается получить результат теста, сгруппированный по f1, f2 и f3. Теперь я хотел бы реализовать функцию суммы, как и SQL-запрос сказал:
select sum(f4), f1, f2, f3 from t1 group by f1, f2, f3
Я пытался что-то вроде этого:
Dim test = result.GroupBy(Function(Key) groupedindexes.Select(Function(groupedindex) Key(groupedindex)).ToArray,
Function(Result) indexes.Select(Function(index) Result(index)).ToArray).Select(
Function(groupedrow) New With
{Key .sum_of_f4 = groupedrow.Sum(Function(row) Convert.ToInt32(row(3))),
Key .f1 = groupedrow.Key(0),
Key .f2 = groupedrow.Key(1),
Key .f3 = groupedrow.Key(2)})
Но f4 не суммируется, я получаю все 101 строк ,
Как исправить мой код, чтобы получить желаемый результат?
Но это не метод синтаксиса на одной стороне, на другой я думаю, я описал проблему достаточно детализированы. Я просто хочу интегрировать функцию sum (или другую агрегатную функцию) в последнем кодеблоке. – derstauner
@derstauner, я добавил тот же запрос в синтаксисе метода к моему ответу. Надеюсь, это сработает для вас. – CrimsonKing
Пожалуйста, внимательно прочитайте вопрос. У меня уже есть функция sum в запросе, но моя проблема в том, что значения f4 не суммируются. Вы можете попробовать, если вы скопируете и вставьте код по сравнению с – derstauner