我想完全外连接两个列表(单独的类),我必须这样做的原因是因为我需要所有的命令从我的系统,以及来自另一个系统的订单。有些订单与订单号匹配,有些订单不匹配,但我仍然想要在网格中显示所有订单。完全外连接两个不同类的列表到第三类的第三个列表
两个接口看起来像这样
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