是的,您可以通过使用投影 a.k.a. select 来做到这一点。 LINQ to SQL select 将启用优化查询并仅检索需要的内容。有两种基本情况。一个沿着关系树上行,从多到一,另一个沿着关系树下行,从一到多。这是一个多对一的例子:
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 查询中创建 XElement 节点来将您的 LINQ to SQL 代码与您的 LINQ to XML 混合使用:-)。天空才是极限。
什么鬼,让我举个例子,如果 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);