如何执行Datatable.Select()查询类型为System.Color的列?

时间:2019-07-02 12:34:21

标签: c# datatable system.data

我有一个DataTable,其中一列为System.Color类型,每当我需要根据颜色值查询一些行时,我都找不到正确的语法。

我需要一个看起来像这样的解决方案:

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

我尝试了使用string和int的方法,但是没有找到可行的解决方案。

1 个答案:

答案 0 :(得分:1)

DataTable.Select支持column expressions语法,包括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();
    }
}