2009-04-29 37 views
2

我很新的LINQ和我有麻烦转换后面的LINQ表达式:LINQ的子名单问题

 Dim returnedInstructions As List(Of Integer) = New List(Of Integer) 
     For Each j As Job In response.Jobs 
      For Each i As Instruction In j.Instructions 
       returnedInstructions.Add(i.InstructionId) 
      Next 
     Next 

任何帮助表示赞赏。

回答

0

你想SelectMany

​​

(现在在VB中,我不知道这是否编译)

Dim returnedInstructions = response.Jobs _ 
    .SelectMany(Function(j) j.Instructions _ 
    .Select(Function(i) i.InstructionID)) _ 
    .ToList() 
2

我对VB并不太熟悉,所以如果这与C#语法有些混淆,请致歉。

returnedInstructions = 
(from j in response.Jobs _ 
from i in j.Instructions _ 
select i.InstructionId).ToList(); 
+0

我以前试过这个确切的例子,但它返回IEnumberable >而不是IEnumberable 。 – Owen 2009-04-29 12:46:11

+1

你确定这是*完全*你试过了吗?双从应该转化为SelectMany的调用(按照David的回答) - ToList将返回列表而不是IEnumerable 2009-04-29 13:00:07

0

像这样的东西应该工作:

Dim returnedInstructions As New List(Of Integer) 
    Dim q = From j In response.Jobs, i In j.Instructions Select i.InstructionID 
    returnedInstructions.AddRange(q)