Да, вы можете сделать это с помощью проекции a.k.a. select
. Выбор LINQ to SQL позволит оптимизировать запрос и получать только то, что нужно. Есть два основных сценария. Один путешествует по реляционному дереву от многих к одному, а другой - от одного ко многим. Вот пример много к одному:
var unshippedOrders =
from order in db.Orders
where order.ShipDate == null
select
{
OrderId = order.Id,
CustomerId = order.Customer.Id,
CustomerName = order.Customer.Name
};
А вот пример от одного ко многим:
var unshippedOrdersPerCustomer =
from customer in db.Customers
select
{
CustomerId = customer.Id,
CustomerName = customer.Name
UnshippedOrders =
from order in customer.Orders
where order.ShipDate == null
select
{
OrderId = order.Id,
OrderPrice = order.Price
}
};
Как видите, во втором запросе у меня есть другой подзапрос, LINQ to SQL решит это за вас. В моих примерах я использовал анонимные типы, но вы также можете использовать простые старые именованные типы. Я думаю, вы даже можете смешать свой код LINQ to SQL с вашим LINQ to XML, создавая узлы XElement прямо в запросе LINQ to SQL :-). Небо это предел.
<ч />
Какого черта, приведу пример, если LINQ to SQL + XML.
XElement xml = new XElement("customers",
from customer in db.Customers
select new XElement("customer",
from order in customer.Orders
where order.ShipDate == null
select new XElement("order",
new XAttribute("id", order.Id),
new XAttribute("price", order.Price)
)
));
Console.WriteLine(xml);