首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有LINQ扩展方法的多个WHERE子句

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

Stack Overflow用户
提问于 2012-01-10 00:17:40
回答 5查看 142.9K关注 0票数 86

我有一个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

关于我之前的问题。如何使用扩展方法来完成此操作?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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的东西。这整个树是在对数据源进行评估时对其执行的。

票数 164
EN

Stack Overflow用户

发布于 2012-01-10 00:20:20

您可以像以前一样继续链接它们。

results = results.Where (o => o.OrderStatus == OrderStatus.Open);
results = results.Where (o => o.InvoicePaid);

这表示一个AND。

票数 27
EN

Stack Overflow用户

发布于 2012-01-10 00:22:00

您可以使用&&并将所有条件写到同一个where子句中,也可以使用.Where()...诸若此类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8791540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档