我有一个LINQ查询,如下所示:
DateTime today = DateTime.UtcNow;
var results = from order in context.Orders
where ((order.OrderDate <= today) && (today <= order.OrderDate))
select order;
我正在尝试学习/理解LINQ。在某些情况下,我需要添加两个额外的WHERE子句。为了做到这一点,我使用了:
if (useAdditionalClauses)
{
results = results.Where(o => o.OrderStatus == OrderStatus.Open) // Now I'm stuck.
}
如您所见,我知道如何添加额外的WHERE子句。但是我如何添加多个呢?例如,我想添加以下内容
WHERE o.OrderStatus == OrderStatus.Open AND o.CustomerID == customerID
关于我之前的问题。如何使用扩展方法来完成此操作?
谢谢!
发布于 2012-01-10 00:21:12
两种方式:
results = results.Where(o => (o.OrderStatus == OrderStatus.Open) &&
(o.CustomerID == customerID));
或者:
results = results.Where(o => (o.OrderStatus == OrderStatus.Open))
.Where(o => (o.CustomerID == customerID));
我通常更喜欢后者。但是,有必要对SQL服务器进行性能分析,以检查查询的执行情况,并查看哪个查询对您的数据执行得更好(如果有任何不同的话)。
关于链接.Where()
方法的注意事项:您可以将您想要的所有LINQ方法链接在一起。像.Where()
这样的方法实际上还不会对数据库执行。它们使用defer execution,直到计算出实际的结果(例如使用.Count()
或.ToList()
)。因此,当您将多个方法链接在一起时(对.Where()
的更多调用,可能是.OrderBy()
或类似的东西,等等)它们构建了一个叫做expression tree的东西。这整个树是在对数据源进行评估时对其执行的。
发布于 2012-01-10 00:20:20
您可以像以前一样继续链接它们。
results = results.Where (o => o.OrderStatus == OrderStatus.Open);
results = results.Where (o => o.InvoicePaid);
这表示一个AND。
发布于 2012-01-10 00:22:00
您可以使用&&并将所有条件写到同一个where子句中,也可以使用.Where()...诸若此类。
https://stackoverflow.com/questions/8791540
复制相似问题