Set操作符
主要方法:
Contact: 返回兩個序列中所有元素的串聯, SQL對應語法為UNION ALL
Union: 返回兩個序列中所有元素的串聯, 但排除重復元素, SQL對應語法為UNION
Intersect: 返回在兩個序列中都存在的元素列表, SQL對應語法為WHERE…IN
Except: 返回在第一個序列中同時又不在第二個序列中的元素列表, SQL對應語法為EXCEPT或者WHERE…NOT IN…
Contact與Union
Contact返回的是第一個序列和第二個序列的所有元素, Union類似, 但是去掉了那些重復的元素:
1: int[] seq1 = { 1, 2, 3 }, seq2 = { 3, 4,5 };
2:
3: IEnumerable<int>
4:
5: concat = seq1.Concat (seq2), // { 1, 2,3, 3, 4, 5 }
6:
7: union = seq1.Union (seq2); // { 1, 2, 3,4, 5 }
Intersect和Except
Intersect返回的是兩個序列共有的元素, Except則返回只在第一個序列中存在而不在第二個序列中的元素:
1: int[] seq1 = { 1, 2, 3 }, seq2 = { 3, 4,5 };
2:
3: IEnumerable<int>
4:
5: commonality = seq1.Intersect (seq2), // { 3 }
6:
7: difference1 = seq1.Except (seq2), // {1, 2 }
8:
9: difference2 = seq2.Except (seq1); // {4, 5 }
Enumerable.Except內部是將序列1的所有的元素加載到一個Dictionary當中,同時移除那些存在於第二個序列中的元素. 其SQL對應物為NOT EXISTS或NOT IN子查詢.
1: SELECT number FROM numbers1Table
2:
3: HERE number NOT IN (SELECT number FROM numbers2Table)
待續!