Попробуйте этот метод. Он должен работать, когда поле, когда вы хотите сохранить изображение, имеет тип bytea
. Сначала он создает byte[]
для изображения. Затем он сохраняет его с помощью IDataParameter
типа binary
.
public static void PerisitImage(string path, IDbConnection connection)
{
using (var command = connection.CreateCommand ())
{
Image img = Image.FromFile (path);
MemoryStream tmpStream = new MemoryStream();
img.Save (tmpStream, ImageFormat.Png); // change to other format
tmpStream.Seek (0, SeekOrigin.Begin);
byte[] imgBytes = new byte[MAX_IMG_SIZE];
tmpStream.Read (imgBytes, 0, MAX_IMG_SIZE);
command.CommandText = "INSERT INTO images(payload) VALUES (:payload)";
IDataParameter par = command.CreateParameter();
par.ParameterName = "payload";
par.DbType = DbType.Binary;
par.Value = imgBytes;
command.Parameters.Add(par);
command.ExecuteNonQuery ();
}
}
Просто не совпадайте с шаблоном на p x
:
predicate {A} {p} {xs = []} = all[]
predicate {A} {p} {x :: xs} with inspect (p x)
predicate {A} {p} {x :: xs} | it true pf rewrite pf = {!!}
predicate {A} {p} {x :: xs} | it false pf rewrite pf = {!!}
Обратите внимание, что идиома inspect
устарела. Используйте для проверки стероидов . Вы можете найти его в стандартной библиотеке здесь .
Ваш код становится
predicate : ∀ {A : Set} {p : A -> Bool } {xs : List A } ->
All (satisfies p) (filter p xs)
predicate {A} {p} {xs = []} = all[]
predicate {A} {p} {xs = x :: xs} with p x | inspect p x
predicate {A} {p} {x :: xs} | true | [ pf ] = {!!}
predicate {A} {p} {x :: xs} | false | [ pf ] = {!!}
, когда pf
находится в первом отверстии
.Data.Unit.Core.reveal (.Data.Unit.Core.hide p x) == true
, который бета-уменьшается до p x == true
. То есть если у вас есть
test : ∀ {A : Set} {p : A -> Bool} {x} -> p x == true -> True
test _ = _
, тогда размещение test {p = p} pf
в первом отверстии и ввод C-c C-d дает вам True
.