我必须比较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的列表。假设值类型与TransactionLevelCommentsCollectionTransactionId中的值类型相同

使用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中存在TransactionIDTransactionLevelCommentsCollection对象:
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中的项目列表,以及每个相应的TransactionIDKey属性,其中TransactionID存在于TransactionLevelCommentsCollection中。

关于.net - 使用LINQ比较和检查集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16333937/

10-09 03:26