VB.Net中的LINQ声明 - 它在做什么?

时间:2015-01-20 21:19:25

标签: vb.net linq for-loop

我试图了解这个LINQ语句实际上在做什么。我没有LINQ的经验,所以我想尝试一些“普通英语”翻译。

MyDataTable包含以下数据: OrderByValues,Contract,PayType,PayAmount

Dim groupIDs = From r In myds.MyDataTable Select OBV = r.Item("OrderByValues"), PT = r.Item("PayType"), Contract = r("Contract") Distinct
For Each r in groupIDS
   a = r.OBV
   b = r.PT
   c = r.Contract
Next

我不确定这里是否有足够的信息来帮助你。我很感激任何帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

它从数据表中选择所有“OrderByValues”,“PayType”和“Contract”列,忽略重复的行。

然后迭代结果集,并分别将3个值分配给变量“a”,“b”和“c”。

答案 1 :(得分:0)

第一行创建一个包含anonymous types集合的查询。由于LINQ's deferred execution,查询尚未执行。这可以细分为:

  • From r In myds.MyDataTabler定义为IEnumerable的单个元素(通常是数组或列表))myds.MyDataTable
  • Select OBV = r.Item("OrderByValues"), ... Distinct创建一个匿名类型,其中包含名为OBVPTContract的属性,并从元素r中分配这些属性值。

foreach循环实际执行查询并创建IEnumerable以进行迭代。然后在此循环中,它会重复地将abc设置为查询中定义的匿名类型的属性。这看起来有点奇怪,因为变量abc只会记住为它们设置的最后一个值。

更多阅读LINQ