| 1 | 2 | 3 |
+------------+
| A | B | C |
| D | E | F |
| G | H | I |
System.Data.DataTable dt = new DataTable();
dt.Columns.Add("1");
dt.Columns.Add("2");
dt.Columns.Add("3");
dt.Rows.Add(new object[] { "A", "B", "C" });
dt.Rows.Add(new object[] { "D", "E", "F" });
dt.Rows.Add(new object[] { "G", "H", "I" });
int? index = null;
var rows = new System.Data.DataView(dt).ToTable(false, new[] {"1"}).Rows;
for (var i = 0; i < rows.Count; i++)
{
if (rows[i].ItemArray.FirstOrDefault() as string == "A")
index = i;
}
有什么方法可以简化此代码以获取特定行的索引并提供列?在这种情况下,索引将是0
,因为我正在迭代第一列,直到找到“A”。感觉应该有一个 linq 解决方案,但我无法弄清楚。
如果您使用DataTableExtensions.AsEnumerable() http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx方法,您将能够使用 LINQ 查询 DataTable。然后您可以使用List<T>.FindIndex http://msdn.microsoft.com/en-us/library/x1xzf2ca.aspx确定给定谓词的索引:
int? index = new System.Data.DataView(dt).ToTable(false, new[] { "1" })
.AsEnumerable()
.Select(row => row.Field<string>("1")) // ie. project the col(s) needed
.ToList()
.FindIndex(col => col == "G"); // returns 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)