2013-01-15 63 views
0

我正在使用以下查询从内存中的数据表中拉出一行。检索从数据表使用Linq的行索引Linq

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) 

我需要获得resultrow的索引,它是exceldt的一部分。我似乎无法找到任何这方面的信息。建议?

回答

2

我不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 
+0

这看起来很有希望,但语法是关闭的。你可以通过转换器使用你习惯的语言来运行代码吗?或者只是将代码添加到您的评论?我很难破译。 –

+1

增加了一个工作示例。 – andleer

+0

我很难实现这一点,所以我在截止日期前选择了不同于Linq的选项,但使用此选项可以很好地完成,并且比我使用的选项更好。 –

1

这应该做的伎俩

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

这似乎返回-1每一次。 –

+0

这里是你要求的数据表示例==> https://docs.google.com/spreadsheet/ccc?key=0Atss2136xoWIdGVpa1VOc3BqNmFISUNrM2lGZzVGVWc –

+0

与vb不太熟悉,但我认为这是因为你正在检查结果表而不是实际的原始表 – legrandviking