【发布时间】:2018-02-12 17:00:49
【问题描述】:
所以我正在尝试对两个对象进行简单的连接。其中一个对象有一列包含两个字符,另一个我加入我使用子字符串来获取我想要的 2 个字符。
看起来像这样:
Dim data As IEnumerable(Of AssignmentsInQCItem)
Using dbContext = New WebDataEntities()
Dim inQCRCDs = New String() {"DIR", "IN"}
data = Await (From m In dbContext.MainDatas
Where m.CID = cid AndAlso (m.RCD = "" OrElse m.RCD Is Nothing) AndAlso (dbContext.qcComments.Where(Function(x) x.TransNo = m.TransNo).Any())
Join l In dbContext.Lenders
On m.ClientID Equals l.ClientID
Select New AssignmentsInQCItem With {
.TransNo = m.TransNo,
.IsRechase = If(m.RechaseON = "R", True, False),
.OrderDate = m.OrderDate,
.DueDate = m.DueDate,
.ClientID = m.ClientID,
.ClientName = l.Name,
.Status = If(inQCRCDs.Contains(m.inQC) = True, "INQC", "Pending"),
.MostRecentComment = m.qcComments.OrderByDescending(Function(x) x.Comment_Date).FirstOrDefault().Comments
}).ToListAsync()
End Using
Using dbAdminDBContext = New DBA_AdminEntities()
Return (From d In data
Join c In dbAdminDBContext.tbl_ClientPortal_LU.ToList()
On c.ClientID_2Char Equals d.ClientID.Substring(0,2)
Select New AssignmentsInQCItem With {
.TransNo = d.TransNo,
.IsRechase = d.IsRechase,
.OrderDate = d.OrderDate,
.DueDate = d.DueDate,
.ClientID = d.ClientID,
.ClientName = d.ClientName,
.Status = d.Status,
.MostRecentComment = d.MostRecentComment,
.ClientType = If(c.AKA = "FC", ClientType.FC, If(c.AKA = "LM", ClientType.LM, ClientType.RPI))
}).ToList()
End Using
然而,这给我返回了 0 个结果,即使仔细观察,子字符串也会返回正确的结果。
更令人困惑的是,如果我用 SQL 编写一个简单的查询,它就可以正常工作:
SELECT ClientID from WebData..MainData
inner join DBA_Admin..tbl_ClientPortal_LU
on SUBSTRING(clientid, 0,3) = ClientID_2Char
where cid = '11R' and (RCD= '' or RCD is null)
示例 ClientID:
MC0099、LM0033、HJ0092
ClientID_2Chars 示例: MC,LM,JH
我也有点困惑,为什么 SQL 子字符串带有 0,3
无论如何,我知道我之前的查询会返回数据。但是连接不返回数据。
我的代码有什么问题?
编辑:
更奇怪的是,这会返回数据:
Dim db2Chars = dbAdminDBContext.tbl_ClientPortal_LU.Select(Function(x) x.ClientID_2Char).ToList()
Dim ex2Chars = data.Select(Function(x) x.ClientID.Substring(0, 2)).ToList()
Dim joi = (From d In db2Chars
Join e In ex2Chars
On d Equals e
Select d).ToList()
【问题讨论】:
-
您能提供给我们样本数据吗?没有样本数据很难重新创建。此外,在调试时,您可以检查
data中的项目数。编辑:现在我看到了编辑,我可以确定data不是空的。 -
@NetMage 这是真正的代码。我已经设法弄清楚了,但我不知道它为什么会起作用。看我的回答
-
@Andrew 我的错 - 没有注意到你在 VB 中! :o
-
@NetMage 不幸的是,我是哈哈
标签: sql-server vb.net linq