Пользовательский агрегат SQLCLR с несколькими параметрами

У меня проблемы с пониманием того, как работают пользовательские агрегаты CLR.

Я должен создать несколько пользовательских агрегатов CLR с несколькими параметрами. Дело в том, чтобы получить значение первого параметра в зависимости от второго.

Например, у меня есть следующие значения в моей таблице, и мне нужен самый старый сотрудникName для каждогоType:

    Type   |   Name   |   Age   
--------------------------------
Manager    | emp 1    |   35    
Manager    | emp 2    |   42    
Developer  | emp 3    |   36    
Developer  | emp 4    |   45    
Developer  | emp 5    |   22    

Поэтому я хотел бы написать такой запрос, чтобы получить результат, используя мою сборку:

Select      Type, dbo.fOldestEmployee(Name, Age) AS [Name]
From        xxx
Group By    Type

Это ответило бы:

    Type   |   Name   
----------------------
Manager    | emp 2     
Developer  | emp 4    

Похоже, что это возможно с помощью пользовательского агрегата CLR, но мне сложно найти конкретный пример такого рода реализации.

На данный момент у меня есть это. Я создаю класс для сбора данных, но как я могу сортировать (или делать что-то другое) для них?

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;
using System.Collections;
using System.IO;

[Serializable]
[SqlUserDefinedAggregate(
    Format.UserDefined,
    IsInvariantToOrder = false, // order changes the result
    IsInvariantToNulls = false, // nulls change the result
    IsInvariantToDuplicates = false, // duplicates change the result
    MaxByteSize = -1)]
public struct sOlder
{
    private List<MyData> _datas;

    public void Init()
    {
        _datas = new List<MyData>();
    }

    public void Accumulate(SqlString valueField, SqlInt32 ValueInt)
    {
        if (!valueField.IsNull && !ValueInt.IsNull)
        {
            _datas.Add(new MyData
            {
                ValField = valueField.Value,
                ValInt = ValueInt.Value
            });
        }
    }

    public void Merge (sOlder Group)
    {
        _datas.AddRange(Group._datas);
    }

    public SqlString Terminate ()
    {
        //...
    }

    public class MyData
    {
        public String ValField { get; set; }
        public Int32 ValInt { get; set; }
    }
}

Есть идеи ?

Ответы на вопрос(2)

Ваш ответ на вопрос