2016-09-07 8 views
0

2つのクエリー([a1]、[a2]を返すqry1、[a1]、[a2]、[a3]を返すqry2)があります。だから私はこれらの2つのクエリを比較したいと思います。それらが等しくない場合、いくつかの機能を実行します。以下は、私が試しているクエリです。私は 'count'演算子と比較したくありません。linq query vb.netの2つの配列リスト項目を比較する方法

Dim Qry1 = (From x In db1.Approvals _ 
     Where x.ID = tId _ 
     And x.APPROVALID = GetRqstID(thisId) _ 
     Select x.APPROVERID).ToList() 


Dim Qry2 = (From x In db.Resources _ 
      Join y In db.Users On x.USER_ID Equals y.USER_ID _ 
      Where x.ID = tskIdIn _ 
      And x.TYPE = rsrcType _ 
      Order By y.FIRST_NAME _ 
      Select x.USER_ID).ToList() 


If ((Qry1.ToArray) <> (Qry2.ToArray)) Then 
--- 
--- 
End If 
+0

UNION JOIN INTERSECTを検索してみてください。あなたはvb.netの質問にac#タグを追加しました - それを削除したいかもしれません –

答えて

0
if (Qry1.Count() != Qry2.Count() || 
    Qry1.Except(Qry2).Count() > 0 || 
    Qry2.Except(Qry1).Count() > 0) 
// not the same. 

私はそれがほとんどのケースをスピードアップする最初の理由は、短絡のカウントチェックを行います。あなたが他の2つをやっているなら、それは必要ではありません。

https://msdn.microsoft.com/en-us/library/bb300779%28v=vs.110%29.aspx

+0

私はカウントを使用したくないですか値を比較し、それらが等しいかどうかを確認したい – Adu

+0

@Adu - 何かを読んでください。あなたは私の答えがあなたが望むことを理解していない。それが私が投稿した理由です。 – Hogan

+0

ありがとう、それは魅力のように働いた! – Adu

0

Linq Intersectが最適です。

int[] id1 = { 44, 26, 92, 30, 71, 38 }; 
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 }; 

IEnumerable<int> both = id1.Intersect(id2); 

foreach (int id in both) 
    Console.WriteLine(id); 

/* 
This code produces the following output and means you have some element repeating on both array instance. If there is no matching element then you can perform the operation that you wanted.: 

26 
30 
*/ 
+0

実際には両方のクエリが同じであるかどうかをチェックしたいと思います。 ; q2(a2、a3)カウントが同じであっても値が異なっている – Adu

+0

要素の利用可能性という意味ではカウントしていません。 – Nair

関連する問題