Версия stardard-SQL с использованием логической логики :
SELECT company_name
, COUNT(action = 'EMAIL' OR NULL) AS "Email"
, COUNT(action = 'PRINT' AND pagecount = 1 OR NULL) AS "Print 1 pages"
, COUNT(action = 'PRINT' AND pagecount = 2 OR NULL) AS "Print 2 pages"
, COUNT(action = 'PRINT' AND pagecount = 3 OR NULL) AS "Print 3 pages"
FROM tbl
GROUP BY company_name;
Как?
TRUE OR NULL
дает TRUE
. FALSE OR NULL
дает NULL
. NULL OR NULL
дает NULL
. И COUNT
учитывает только ненулевые значения. Вуаля.
Даже если ваш ImageSource не является BitmapImage, вы все равно можете применить его к BitmapSource
, который является базовым классом для всех классов растрового изображения WPF, таких как BitmapImage, BitmapFrame, WriteableBitmap, RenderTargetBitmap и т. д. (см. здесь ).
Итак, если ваш ImageSource на самом деле является BitmapSource (а не DrawingImage или D3DImage), следующий метод преобразует его в массив байтов с помощью указанного BitmapEncoder (например, PngBitmapEncoder):
public byte[] ImageSourceToBytes(BitmapEncoder encoder, ImageSource imageSource)
{
byte[] bytes = null;
var bitmapSource = imageSource as BitmapSource;
if (bitmapSource != null)
{
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
using (var stream = new MemoryStream())
{
encoder.Save(stream);
bytes = stream.ToArray();
}
}
return bytes;
}