我想完全外連接兩個列表(單獨的類),我必須這樣做的原因是因爲我需要所有的命令從我的系統,以及來自另一個系統的訂單。有些訂單與訂單號匹配,有些訂單不匹配,但我仍然想要在網格中顯示所有訂單。完全外連接兩個不同類的列表到第三類的第三個列表
兩個接口看起來像這樣
interface IOrderInternal
{
int ID { get; } // My systems inernal ID
string NO_Order { get; } // My external ID
DateTime? OrderDate { get; }
}
interface IOrderExternal
{
int ID { get; } // External systems internal ID
string ProjectNumber{ get; }
}
的加盟HESE兩個接口應該最終會被
interface IOrderInternal
{
int ID_IN { get; set; }
int ID_EX { get; set; }
string ProjectNumber{ get; set; }
DateTime OrderDate { get; set; }
}
所以兩個列表中應該完全外連接它們的函數傳入,基於NO_Order =項目編號
IList<IOrderInternal> INOrders
IList<IOrderExternal> EXOrders
var leftJoin = from exorder in EXOrders
join inorder in INOrders
on exorder.ProjectNumber equals inorder.NO_Order
into temp
from inorder in temp
select new Order
{
ID_IN = inorder == null ? default(int) : inorder.ID,
ID_EX = exorder.ID,
ProjectNumber = inorder == null ? default(string) : inorder.NO_Order
OrderDate = inorder == null ? default(DateTime) : inorder.OrderDate
};
var rightJoin = from inorderin INOrders
join exorderin EXOrders
on inorder.NO_Order equals exorder.ProjectNumber
into temp
from exorder in temp
select new Order
{
ID_IN = inorder.ID,
ID_EX = exorder == null? default(int) : exorder.ID,
ProjectNumber = inorder.NO_Order
OrderDate = inorder.OrderDate
};
var joinedList = leftJoin.Union(rightJoin);
當我加入列表我只ge t內連接的結果。但我需要知道所有的訂單。
任何幫助表示讚賞:)
我假定在你的接口的定義中,一個應該被命名爲'IOrderExternal'而不是'IOrderInternal',並且連接的接口也應該有一個不同的名字。 – juharr
謝謝,現在就編輯它! – Alex