我有一个 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
到我之前的查询。如何使用扩展方法来做到这一点?
谢谢你!
两种方式:
results = results.Where(o => (o.OrderStatus == OrderStatus.Open) &&
(o.CustomerID == customerID));
or:
results = results.Where(o => (o.OrderStatus == OrderStatus.Open))
.Where(o => (o.CustomerID == customerID));
我通常更喜欢后者。但值得对 SQL Server 进行分析以检查查询执行并查看哪一个对您的数据执行得更好(如果有任何差异)。
关于链接的注意事项.Where()
方法:您可以将所需的所有 LINQ 方法链接在一起。方法如.Where()
实际上还没有对数据库执行。他们推迟执行 http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx直到计算出实际结果(例如.Count()
or a .ToList()
)。因此,当您将多个方法链接在一起时(更多调用.Where()
,也许是一个.OrderBy()
或类似的东西,等等)他们建立了所谓的表达式树 http://msdn.microsoft.com/en-us/library/bb397951.aspx。当评估数据源时,会针对数据源执行整个树。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)