Как выполнить запрос Datatable.Select () для столбца типа System.Color? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть DataTable, где один из столбцов имеет тип System.Color, и когда мне нужно запросить несколько строк в соответствии со значением цвета, я не могу найти правильный синтаксис для этого.

Мне нуженрешение, которое выглядит примерно так:

DataRow[] _queried = dataTable.Select("ColorColumn = " + System.Color.Red);

Я пробовал как string и int и не нашел работающего решения.

1 Ответ

1 голос
/ 02 июля 2019

DataTable.Select поддерживает выражения столбца синтаксис, включая функцию CONVERT. Оказывается, CONVERT работает и для столбцов типа System.Drawing.Color.

Примерно так должно работать:

DataRow[] queried = table.Select("CONVERT(ColorColumn, System.String) = 'Color [Red]'");

или, если вы хотите передать Color в качестве переменной:

var filterColor = Color.Red;
var queried = table.Select($"CONVERT(ColorColumn, System.String) = '{filterColor}'");

Пример выполнения:

using System;
using System.Data;
using System.Drawing;
using System.Linq;

class Program
{
    private static void Main()
    {
        var table = new DataTable();
        table.Columns.Add(new DataColumn("Name", typeof(string)));
        table.Columns.Add(new DataColumn("Color", typeof(Color)));
        table.Rows.Add("First", Color.Red);
        table.Rows.Add("Second", Color.DarkRed);
        table.Rows.Add("Third", Color.Green);
        table.Rows.Add("Fourth", Color.Red);
        table.Rows.Add("Fifth", Color.Yellow);
        var filterColor = Color.Red;
        var queried = table.Select($"CONVERT(Color, System.String) = '{filterColor}'");
        //First, Fourth
        Console.WriteLine(string.Join(",", queried.Select(r => r["Name"])));
        Console.Read();
    }
}
...