我有一个包含4列A,B,C和D的数据表,因此A,B和C列的特定值组合在数据表中是唯一的.
目标:为列A,B和C的给定值组合找到列D的值.
我想循环数据行集应该这样做.有没有办法使用Datatable.Select()来实现这一目标?更具体一点 - 我可以在选择过滤器中有多个条件,即逻辑AND运算符连接每个列A,B和C的条件.
是的,该DataTable.Select
方法支持布尔运算符的方式与在"真正的"SQL语句中使用它们的方式相同:
DataRow[] results = table.Select("A = 'foo' AND B = 'bar' AND C = 'baz'");
有关DataTable 方法支持的语法,请参阅MSDN中的DataColumn.ExpressionSelect
.
你必须使用DataTable.Select()
?我更喜欢为这种事写一个linq查询.
var dValue= from row in myDataTable.AsEnumerable() where row.Field("A") == 1 && row.Field ("B") == 2 && row.Field ("C") == 3 select row.Field ("D");
我发现有太多而且会返回不正确的结果(无论如何,对于.NET 1.1)
DataRow[] results = table.Select("A = 'foo' AND B = 'bar' AND C = 'baz' and D ='fred' and E = 'marg'");
在我的情况下,A是表中的第12个字段,而select实际上忽略了它.
但是,如果我这样做
DataRow[] results = table.Select("A = 'foo' AND (B = 'bar' AND C = 'baz' and D ='fred' and E = 'marg')");
过滤器工作正常!
试试这个,
我想,这是一个简单的解决方案.
int rowIndex = table.Rows.IndexOf(table.Select("A = 'foo' AND B = 'bar' AND C = 'baz'")[0]); string strD= Convert.ToString(table.Rows[rowIndex]["D"]);
确保,A,B和C列的值组合在数据表中是唯一的.