Ответ 1
Фактический код должен быть
1)
var orders = from o in Orders
where o.OrderItems.Any(i => i.PartId == 100)
select o;
Метод Any() возвращает bool и похож на предложение SQL "in". Это получит весь порядок, где есть Any OrderItems, у которого есть PartId из 100.
2а)
// This will create a new type with the 2 details required
var orderItemDetail = from o in Orders
from i in Orders.OrderItems
where i.PartId == 100
select new()
{
o.OrderNumber,
i.PartName
}
Два из предложений являются внутренним соединением.
2b)
// This will populate the OrderItemSummary type
var orderItemDetail = from o in Orders
from i in Orders.OrderItems
where i.PartId == 100
select new OrderItemSummary()
{
OriginalOrderNumber = o.OrderNumber,
PartName = i.PartName
}
3)
// This will create a new type with two properties, one being the
// whole OrderItem object.
var orderItemDetail = from o in Orders
from i in Orders.OrderItems
where i.PartId == 100
select new()
{
OrderNumber = o.OrderNumber,
Item = i
}
Так как "i" является объектом Type OrderItem, элемент создается как OrderItem.