3

我必须比较 2 个集合并检查transactionId. 如果存在,则发出警报。TransactionLevelCommentsCollectionTransactionCommentsCollectionTransactionLinq.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

4

2 回答 2

1
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 需要sKey而不是s TransactionID,因此有 3 种方法可以获得Keys。

方法一: 继续上图的方法,获取Keyitems的值使用:

For Each id In idExist 
    rec.First(Function(o) o.TransactionId = id).Key
Next

方法2: 下面的代码是完全重写的(与上面显示的方法无关),它将rec从上面的LINQ返回对象,这些对象TransactionID存在于TransactionLevelCommentsCollection

Dim xrec = rec.Where(Function(o) TransactionLevelCommentsCollection.Exists(Function(tlc) tlc.TransactionId = o.TransactionId))

好吧,实际上这段代码将循环每个TransactionLevelCommentsCollection项目检查每个项目中的TransactionId匹配项。不同之处在于它是在 1 行代码中完成的。TransactionIdrec

方法3: 这也是一个完全重写的代码,使用连接查询:

Dim xrec = From r In rec
           From tlc In TransactionLevelCommentsCollection
           Where r.TransactionId = tlc.TransactionId
           Select r.TransactionId, r.Key

现在 xrec 包含来自rec每个对应项的项目列表TransactionID以及KeyTransactionID存在的属性TransactionLevelCommentsCollection

于 2013-05-02T10:02:52.883 回答
0

就这样做

var GetCollection=(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).Tolist();

Get another collection of TransactionCommentsCollection like var SearchList=Db.tblTransactionCommentsCollection.tolist()
Foreach(var Obj in GetCollection)
{
      for(int i=0;i<  SearchList.count();i++)
       {
              if(Obj.transactionId==SearchList.elementat(i).transactionId)
                  {
                        messageBox()/Alert(SearchList.elementat(i).transactionId);
                        break;
                   }
       }
}

我不知道它会为您服务,但在此我有两个列表。一种是您的结果集,另一种是您必须在其中搜索特定项目。此语法是 c# 的。你可以做到这一点是VB,如果它对你有用,请标记答案。

于 2013-05-02T09:21:29.917 回答