首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从某个列获取datatable中的行索引

从某个列获取datatable中的行索引
EN

Stack Overflow用户
提问于 2012-12-19 20:38:09
回答 5查看 44.6K关注 0票数 16
代码语言:javascript
复制
| 1 | 2 | 3 |
+------------+
| A | B | C |
| D | E | F | 
| G | H | I |

代码语言:javascript
复制
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解决方案来解决这个问题,但我想不出来。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-19 20:42:25

如果你使用DataTableExtensions.AsEnumerable()方法,你将能够用LINQ查询你的DataTable。然后可以使用List.FindIndex来确定给定谓词的索引:

代码语言:javascript
复制
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
票数 10
EN

Stack Overflow用户

发布于 2012-12-19 21:09:08

您应该能够像这样使用DataTable.Select方法:

代码语言:javascript
复制
DataRow[] foundRows;
string filter = "1 == A";
foundRows = dt.Select(filter);

foreach (DataRow dr in foundRows)
{
    Console.WriteLine("Index is " + dr.Table.Rows.IndexOf(dr));
}
票数 5
EN

Stack Overflow用户

发布于 2012-12-19 21:05:40

代码语言:javascript
复制
var index = from row in dt.AsEnumerable()
            let r = row.Field<string>("1")
            where r == "A"
            select dt.Rows.IndexOf(row);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13952660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档