Я создал IBinarySerialize
регион, чтобы создать свой CLR для моего пользовательского агрегата. Я пытаюсь скопировать свою функцию XIRR в C #, чтобы узнать, как работать с CLR. Я поставил «Запись» и «Чтение» в том же порядке, но при попытке сборки получаю сообщение об ошибке:
Код серьезности Описание Состояние подавления строки файла проекта
Ошибка CS1503 Аргумент 1: невозможно преобразовать из 'System. Data.SqlTypes.SqlDateTime 'to' bool 'CustomAggregates D: \ Transfer \ CustomSqlAggregates \ CustomAggregates \ XIRR.cs 255 Active
Ошибка поступает из раздела записи.
Кажется, я не могу найти то, что мне не хватает в этой схеме, после нескольких примеров, которые я видел в примерах. Вот get / set для структуры
[Serializable]
[SqlUserDefinedAggregate(
Format.Native,
IsInvariantToDuplicates = false, // Receiving the same value again changes the result
IsInvariantToNulls = false, // Receiving a NULL value changes the result
IsInvariantToOrder = true, // The order of the values affects the result
IsNullIfEmpty = true, // If no values are given the result is null
MaxByteSize = -1, // Maximum size of the aggregate instance. -1 represents a value larger than 8000 bytes, up to 2 gigabytes
Name = "XIRR" // Name of the aggregate
)]
public struct XIRR : IBinarySerialize
{
/// <summary>
/// Used to store the product
/// </summary>
public SqlDouble Result { get; private set; }
public SqlDouble Cashflow { get; private set; }
public SqlDateTime CashflowDateTime { get; private set; }
public bool HasValue { get; private set; }
public List<CashItem> CashFlows { get; private set;}
...
#region IBinarySerialize
/// <summary>
/// Writes the values to the stream in order to be stored
/// </summary>
/// <param name="write">The BinaryWriter stream</param>
public void Write(System.IO.BinaryWriter write)
{
write.Write(Result);
write.Write(Cashflow); //Line - 255
write.Write(CashflowDateTime);
write.Write(HasValue);
}
/// <summary>
/// Reads the values from the stream
/// </summary>
/// <param name="read">The BinaryReader stream</param>
public void Read(System.IO.BinaryReader read)
{
Result = new SqlDouble(read.ReadDouble());
Cashflow = new SqlDouble(read.ReadDouble());
CashflowDateTime = new SqlDateTime(Convert.ToDateTime(read.ReadString()));
HasValue = read.ReadBoolean();
}
#endregion IBinarySerialize
}
Заранее спасибо.
Пожалуйста, дайте мне знать, если вы хотите, чтобы я предоставил дополнительную информацию.