linq 中的右外连接到实体查询
Right outer join in linq to entities query
每个 Order
需要 RoutingStep
秒,每个步骤包含一个 Operation
,每个操作需要 Workshop
.
public class Order
{
public int Id {get; set;}
public string OrderNumber {get; set;}
public virtual collection<Routing> Routings{get; set;}
}
public class Routing
{
public int Id {get; set;}
public virtual Order Order {get; set;}
public virtual Operation Operation{get; set;}
}
public class Operation
{
public int Id {get; set;}
public virtual Workshop Workshop{get; set;}
}
public class Workshop
{
public int Id {get; set;}
public string Title {get; set;}
}
我想编写一个 linq to entity 查询(方法语法)来了解每个订单通过哪些 Workshop
s 而没有通过哪些 Workshop
s。换句话说
如果我总共有 4 个 Workshop
并且 O1
包含 3 个 Routing
步骤,我想要 O1
的以下结果:
------------------------------
| Order | Workshop | status |
------------------------------
| O1 | W1 | pass |
------------------------------
| O1 | W2 | pass |
------------------------------
| O1 | W3 |not pass|
------------------------------
| O1 | W4 | pass |
-------------------------------
我写了下面的代码
var query = db.Orders
.SelectMany(order=> order.Routings
.Select(g => new
{
Number = g.Order.OrderNumber,
Workshop = g.Operation.Workshop.Title,
Status = g.????
}).ToList();
我应该使用哪个代码代替“???” ?
var query = db.Orders
.SelectMany(x => db.Workshops, (x, y) => new { Order = x, Workshop = y }) // all combinations of orders with workshops
.GroupJoin( // left join to determine whether each combination actually exists
db.Routings,
x => x, // proposed order-workshop pair
y => new { Order = y.Order, Workshop = y.Operation.Workshop }, // existing order-workshop pair
(x, ys) => new
{
x.Order.OrderNumber,
x.Workshop.Title,
Status = ys.Any() ? "pass" : "not pass"
});
每个 Order
需要 RoutingStep
秒,每个步骤包含一个 Operation
,每个操作需要 Workshop
.
public class Order
{
public int Id {get; set;}
public string OrderNumber {get; set;}
public virtual collection<Routing> Routings{get; set;}
}
public class Routing
{
public int Id {get; set;}
public virtual Order Order {get; set;}
public virtual Operation Operation{get; set;}
}
public class Operation
{
public int Id {get; set;}
public virtual Workshop Workshop{get; set;}
}
public class Workshop
{
public int Id {get; set;}
public string Title {get; set;}
}
我想编写一个 linq to entity 查询(方法语法)来了解每个订单通过哪些 Workshop
s 而没有通过哪些 Workshop
s。换句话说
如果我总共有 4 个 Workshop
并且 O1
包含 3 个 Routing
步骤,我想要 O1
的以下结果:
------------------------------
| Order | Workshop | status |
------------------------------
| O1 | W1 | pass |
------------------------------
| O1 | W2 | pass |
------------------------------
| O1 | W3 |not pass|
------------------------------
| O1 | W4 | pass |
-------------------------------
我写了下面的代码
var query = db.Orders
.SelectMany(order=> order.Routings
.Select(g => new
{
Number = g.Order.OrderNumber,
Workshop = g.Operation.Workshop.Title,
Status = g.????
}).ToList();
我应该使用哪个代码代替“???” ?
var query = db.Orders
.SelectMany(x => db.Workshops, (x, y) => new { Order = x, Workshop = y }) // all combinations of orders with workshops
.GroupJoin( // left join to determine whether each combination actually exists
db.Routings,
x => x, // proposed order-workshop pair
y => new { Order = y.Order, Workshop = y.Operation.Workshop }, // existing order-workshop pair
(x, ys) => new
{
x.Order.OrderNumber,
x.Workshop.Title,
Status = ys.Any() ? "pass" : "not pass"
});