【发布时间】:2014-08-28 15:11:37
【问题描述】:
我有两个强类型数据表(dt1):
|FirstName|LastName|Val1|Val2|
|Tony |Stark |34 |35 |
|Steve |Rogers |12 |23 |
|Natasha |Romanoff|2 |100 |
第二个 (dt2)
|FirstName|LastName|Val1|Val2|
|Tony |Stark |16 |5 |
|Bruce |Banner |2 |1 |
|Steve |Rogers |54 |40 |
我尝试创建一个新的数据表,在其中添加人员的值。我需要一个外部联接,因为我需要所有人,并且第二个表中的值减半。
所以结果应该是这样的:
|FirstName|LastName|Val1|Val2|
|Tony |Stark |42 |37.5|
|Steve |Rogers |39 |43 |
|Natasha |Romanoff|2 |100 |
|Bruce |Banner |1 |0.5 |
我的方法是使用 LINQ:
Dim query =
from a in ds1.Table1
Join b in ds2.Table2
On a.FirstName + a.LastName Equals b.FirstName + b.Lastname
Select New With {
.FirstName = a.FirstName,
.LastName = a.LastName,
.Val1 = a.Val1 + b.Val1 *0.5,
.Val2 = a.Val2 + b.Val2 *0.5
}
但我并没有让所有人都接受这种方法。我也试过了
Dim query =
From a in ds1.Table1
From b in ds2.Table2
Select New With{
Key .KeyName = a.FirstName + a.LastName = b.FirstName + b.FirstName,
.Val1 = a.Val1 + b.Val1 *0.5,
.Val2 = a.Val2 + b.Val2 * 0.5
}
现在每个人都有很多条目。谁能帮我完成这件事。我不知道是否有没有 Linq 的另一种方法来解决这个问题。
【问题讨论】:
-
我会使用 for 循环和字典。如果您真的想要 LINQ,请查看:LEFT OUTER JOIN in LINQ。关键是
.DefaultIfEmpty(),你需要先做LEFT OUTER JOIN,然后再做RIGHT OUTER JOIN,这样就可以得到一个FULL JOIN。 -
另一种选择是与 group by 进行联合。
-
您是否尝试将解决方案应用于您的数据表?有效吗?
标签: c# vb.net linq datatable strongly-typed-dataset