網路
像這種怎麼寫?
你寫的語句僅僅是左外連線,而你要的結果卻是左外連線和右外連線的交集(以user_id為鍵做比較)。
當然通常我們不會這樣做,因為太低效。
乙個簡單點的辦法是先取兩個list的user_id做並集運算得到所有的主鍵,然後依據主鍵進行子查詢。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
tmp1 = list1
.select(i => i.user_id)
.union(list2.select(i => i.user_id))
.tolist()
.select(id =>
;
});
稍微解釋下。首先我們拿到list1和list2的所有user_id,然後使用union擴充套件方法做並集運算得到匿名ienumerable,裡面的值是。對其中每乙個值id,在list1和list2上比較user_id==id得到i1和i2。根據i1和i2是否為空決定該如何select結果集。
等價的查詢子句語法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
tmp11 =
from
id
in
(
from
i1
in
list1
select
i1.user_id)
.union((
from
i2
in
list2
select
i2.user_id))
.tolist()
let
r1 = (
from
i1
in
list1
where
i1.user_id == id
select
i1)
.firstordefault()
let
r2 = (
from
i2
in
list2
where
i2.user_id == id
select
i2)
.firstordefault()
select
new
;
如果想利用現有的**,我們還可以為newlist補上它缺失的記錄。檢查一下list2中所有user_id沒有在list1中出現的記錄即可。
1
2
3
4
5
6
7
8
9
10
11
newlist = newlist.concat(
from
b
in
list2
where
!(
from
a
in
list1
select
a.user_id).contains(b.user_id)
select
new
);
等價的查詢符語法:
1
2
3
4
5
6
7
8
9
10
11
newlist = newlist.concat(
list2
.where(i2 => !list1.select(i1 => i1.user_id).contains(i2.user_id))
.select(b =>
new
));
還有其他幾種方式可以滿足你的需要,這裡就不過多解釋了。有問題請追問。
兩個List資料集合合併成乙個List
開發工具與關鍵技術 visual studio 與c 查詢兩個差不多相同的表,乙個是入庫表,乙個是退貨表,字段大致相同,但是有所差異,入庫表的數量和所有金額都是正數,退貨表的數量和金額都是負數,所以不能join鍊錶查詢,需要分開查詢出兩個tolist 但是return只能有乙個,不能return兩次...
Java實現比較兩個List集合是否相等
參考的文章兩個list比較內容是否一樣寫的,主要對文章講到的比較演算法的具體實現進行了完善改造。比較兩個list集合是否相等 注 1.如果乙個list的引用為null,或者其包含的元素個數為0,那麼該list在本邏輯處理中都算作空 2.泛型引數e涉及到物件,所以需要確保正確實現了對應物件的equal...
Java實現比較兩個List集合是否相等
比較兩個list集合是否相等 注 1.如果乙個list的引用為null,或者其包含的元素個數為0,那麼該list在本邏輯處理中都算作空 2.泛型引數e涉及到物件,所以需要確保正確實現了對應物件的equal 方法。param list1 param list2 return public static...