我必须比较2个集合,并检查transactionId
中是否存在TransactionLevelCommentsCollection
中的TransactionCommentsCollection
。如果存在,则发出TransactionLinq.Key
警报。
//码
For Each Record In (From TransactionCommentLinq In Me.TransactionCommentsCollection
Join TransactionLinq In Me.TransactionsCollection On TransactionLinq.TransactionId Equals TransactionCommentLinq.TransactionId
Join TaskLinq In Me.WorkflowsController.TasksController.TasksCollection On TaskLinq.TaskId Equals TransactionCommentLinq.TaskId
Select TransactionLinq.Key,TransactionLinq.TransactionId, TaskLinq.TaskId Distinct)
// Have to check the values exists in TransactionLevelCommentsCollection here
Next
记录返回transactionId,我必须检查
TransactionLevelCommentsCollection
内部 最佳答案
Dim rec = From TransactionCommentLinq In Me.TransactionCommentsCollection
Join TransactionLinq In Me.TransactionsCollection On TransactionLinq.TransactionId Equals TransactionCommentLinq.TransactionId
Join TaskLinq In Me.WorkflowsController.TasksController.TasksCollection On TaskLinq.TaskId Equals TransactionCommentLinq.TaskId
Select TransactionLinq.Key,TransactionLinq.TransactionId, TaskLinq.TaskId Distinct
由于您只想比较
TransactionId
的值,因此:Dim transIds = rec.Select(Function(r) r.TransactionId)
现在,您可以从上面的长长的linq中获得TransactionId的列表。假设值类型与
TransactionLevelCommentsCollection
的TransactionId
中的值类型相同使用
Intersect
:Dim idExist = transIds.Intersect(TransactionLevelCommentsCollection.Select(Function(x) x.TransactionId)
现在
idExist
将包含两个集合中都存在的ID列表。基于新要求的更新
由于OP需要使用
Key
而不是TransactionID
,因此有3种获取Key
的方法。方法1:
继续上面显示的方法,使用以下命令获取项的
Key
值:For Each id In idExist
rec.First(Function(o) o.TransactionId = id).Key
Next
方法2:
下面的代码是完全重写的(与上面显示的方法无关),它将从上面的LINQ返回
rec
中存在TransactionID
的TransactionLevelCommentsCollection
对象:Dim xrec = rec.Where(Function(o) TransactionLevelCommentsCollection.Exists(Function(tlc) tlc.TransactionId = o.TransactionId))
好吧,实际上,此代码将循环每个
TransactionLevelCommentsCollection
项目,以检查与每个TransactionId
项目中的TransactionId
相匹配的rec
。区别在于它是在1行代码中完成的。方法3:
这也是使用联接查询完全重写的代码:
Dim xrec = From r In rec
From tlc In TransactionLevelCommentsCollection
Where r.TransactionId = tlc.TransactionId
Select r.TransactionId, r.Key
现在,xrec包含
rec
中的项目列表,以及每个相应的TransactionID
和Key
属性,其中TransactionID
存在于TransactionLevelCommentsCollection
中。关于.net - 使用LINQ比较和检查集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16333937/