Вы можете использовать кортежи значений, поэтому возвращайте новый кортеж значений следующим образом:
public (string Name, int Age, DateTimeOffset Timestamp)[] GetValues()
{
return database.Where(x => ...)
.Select(x => (Name: x.Name, Age: x.Age, Timestamp: DateTimeOffset.Now))
.ToArray();
}
Затем вы получаете универсальный массив с кортежами значений в качестве результата и можете получить доступ к этим значениям, используя данное свойствоимена, например, такие:
var array = GetValues();
var age = array.First(x => x.Name == "John Doe").Age;
Таким образом, вы получаете гибкость, не требуя определения пользовательского типа