我有一个DataTable,其中一列为System.Color
类型,每当我需要根据颜色值查询一些行时,我都找不到正确的语法。
我需要一个看起来像这样的解决方案:
DataRow[] _queried = dataTable.Select("ColorColumn = " + System.Color.Red);
我尝试了使用string和int的方法,但是没有找到可行的解决方案。
答案 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();
}
}