具有 LINQ 扩展方法的多个 WHERE 子句

2023-12-28

我有一个 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(使用前将#替换为@)

具有 LINQ 扩展方法的多个 WHERE 子句 的相关文章

随机推荐