【问题标题】:Retrieving the row index of row pulled from datatable useing Linq使用 Linq 检索从数据表中提取的行的行索引
【发布时间】:2013-01-15 21:12:50
【问题描述】:

我正在使用以下查询从内存中的数据表中提取一行。

Dim results = _
   From myRow In exceldt.AsEnumerable() _
   Where myRow.Field(Of String)("Serial Number") = Row.Item("Serial Number") _
   Select myRow

resultrow = results.CopyToDataTable.Rows(0)

当它是 exceldt 的一部分时,我需要获取结果行的索引。我似乎在这方面找不到任何东西。建议?

【问题讨论】:

    标签: asp.net vb.net linq


    【解决方案1】:

    我不在 VB.net 中工作,所以请原谅我的代码,但您可以通过以下方式获得投影的索引:

    Dim result = exceldt.AsEnumerable() .Select (Function(item, index) _
      New With { .Index = index, .SerialNumber = item }).ToList 
    

    我无法在 VB 中提供更多信息,但这个快速示例确实可以作为控制台应用程序使用。您可以看到选择/投影如何捕获索引和项目。在过滤(在哪里)您的初始枚举之前,您需要合并类似的逻辑。

    Dim names = {"Andy", "Tom", "Fred", "Sally"}
    
    Dim results = names _
        .Select(Function(item, index) New With {.Index = index, .Name = item}) _
        .OrderBy(Function(item) item.Name)
    
    For Each item In results
        Console.WriteLine("{0} - {1}", item.Index, item.Name)
    Next
    

    结果

    0 - Andy
    2 - Fred
    3 - Sally
    1 - Tom
    

    【讨论】:

    • 这看起来很有希望,但语法不正确。您可以通过转换器从您习惯的语言运行代码吗?或者只是将代码添加到您的评论中?我很难破译。
    • 我很难实现这一点,所以由于截止日期,我选择了与 Linq 不同的选项,但使用此选项可以很好地完成,并且比我使用的选项更好。
    【解决方案2】:

    这应该可以解决问题

    int index = exceldt.Rows.IndexOf(results);
    

    【讨论】:

    • 这似乎每次都返回-1。
    • 这是您要求的数据表示例 ==> docs.google.com/spreadsheet/…
    • 对 vb 不太熟悉,但我认为这是因为您正在检查结果表而不是实际的原始表
    • 我已经编辑了我的原始答案,这个应该更好;)
    • results 是查询返回的行的集合,而不是表本身。 exceldt 是原始表格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2011-02-02
    • 2016-03-07
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多