2

在这个 msdn 示例中:

.NET 标准查询运算符

我们看到这个 LEFT JOIN 的例子:

var custTotalOrders =
 from c in customers
 join o in orders on c.CustomerID equals o.CustomerID into co
 from o in co.DefaultIfEmpty(emptyOrder)
 select new { c.Name, o.OrderDate, o.Total };

它说:

其中emptyOrder是一个Order实例,用于表示缺失的订单。

那么,emptyOrder是从哪里来的呢?如何在我的代码中使用它?

4

1 回答 1

2

DefaultIfEmpty 有两个重载

默认如果空()

DefaultIfEmpty(defaultValue)

第一个将返回 default(T) ,其中 T 是当可枚举为空时包含在可枚举中的类型。

当可枚举为空时,第二个将返回 defaultValue 参数中给出的值。

假设您像这样声明 emptyOrder:

Order emtpyOrder = new Order() { Total=100 };

然后在查询中:

var custTotalOrders =
from c in customers
join o in orders on c.CustomerID equals o.CustomerID into co
from o in co.DefaultIfEmpty(emptyOrder)
select new { c.Name, o.OrderDate, o.Total };

当客户没有匹配的订单时,投影匿名对象中的 Total 属性的值为 100。

于 2012-07-11T19:58:07.373 回答