作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 vb.net 中的 LINQ 有疑问。基本上我想在两个数据表之间创建 LEFT JOIN。
这是两个数据表的信息:
Dim vDT1 As New DataTable
vDT1.Columns.Add("Key")
vDT1.Columns.Add("Data1")
vDT1.Columns.Add("Data2")
vDT1.Rows.Add({"01", "DATA1_AAAA", "DATA2_AAAA"})
vDT1.Rows.Add({"02", "DATA1_BBBB", "DATA2_BBBB"})
Dim vDT2 As New DataTable
vDT2.Columns.Add("Key")
vDT2.Columns.Add("Data3")
vDT2.Columns.Add("Data4")
vDT2.Rows.Add({"01", "DATA3_AAAA", "DATA4_AAAA"})
vDT2.Rows.Add({"01", "DATA3_BBBB", "DATA4_BBBB"})
vDT2.Rows.Add({"01", "DATA3_CCCC", "DATA4_CCCC"})
vDT2.Rows.Add({"01", "DATA3_DDDD", "DATA4_DDDD"})
Dim vDRnull As DataRow = vDTsec.Rows.Add
From a In vDT1.AsEnumerable
Group Join bTemp In vDT2.AsEnumerable
On a.Field(Of String)("Key") Equals bTemp.Field(Of String)("Key")
Into Group From b In Group.DefaultIfEmpty(vDRnull)
Select a, b
Dim vDT1 As New DataTable
vDT1.Columns.Add("Key")
vDT1.Columns.Add("Data1")
vDT1.Columns.Add("Data2")
vDT1.Rows.Add({"01", "DATA1_AAAA", "DATA2_AAAA"})
vDT1.Rows.Add({"02", "DATA1_BBBB", "DATA2_BBBB"})
Dim vDT2 As New DataTable
vDT2.Columns.Add("Key")
vDT2.Columns.Add("Data3")
vDT2.Columns.Add("Data4")
vDT2.Rows.Add({"01", "DATA3_AAAA", "DATA4_AAAA"})
vDT2.Rows.Add({"01", "DATA3_BBBB", "DATA4_BBBB"})
vDT2.Rows.Add({"01", "DATA3_CCCC", "DATA4_CCCC"})
vDT2.Rows.Add({"01", "DATA3_DDDD", "DATA4_DDDD"})
Dim vDRnull As DataRow = vDT2.Rows.Add
Dim vLINQ = From a In vDT1.AsEnumerable
Group Join bTemp In vDT2.AsEnumerable
On a.Field(Of Object)("Key") Equals bTemp.Field(Of Object)("Key")
Into Group Let b = If(Group.FirstOrDefault Is Nothing, vDRnull, Group.FirstOrDefault)
Select a, b
最佳答案
关键是调用FirstOrDefault()
在群里。然后你要么拥有组中的第一行,要么拥有 Nothing
.
Dim query =
From a In vDT1.AsEnumerable
Group Join b In vDT2.AsEnumerable
On a.Field(Of String)("Key") Equals b.Field(Of String)("Key")
Into Group
Let b = Group.FirstOrDefault
Select Key = a.Field(Of String)("Key"),
Data1 = a.Field(Of String)("Data1"),
Data2 = a.Field(Of String)("Data2"),
Data3 = If(b Is Nothing, Nothing, b.Field(Of String)("Data3")),
Data4 = If(b Is Nothing, Nothing, b.Field(Of String)("Data4"))
' Or Simply
'Select a, b
关于VB.Net LINQ - 两个数据表之间的左外连接 - 限制为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015284/
我知道除了知道什么是“最喜欢的编程卡通”之外,stackoverflow 会对我有所帮助:P 这是接受的答案: Bill Karwin 感谢大家的帮助(我想给你们加倍投票) 我的查询结果是这样的(这是
我查询了此查询,该查询将相关图像返回到评论 return $comments = \DB::table('comments')->select('comments.comment','com
如果没有任何地址(内部连接),我有以下 LINQ 返回零。我如何将其设为 Outer Join 然后仅 Take(1)? var results = query.Join(
我是一名优秀的程序员,十分优秀!