【问题标题】:Linq With Multiple Where Conditions [closed]具有多个 Where 条件的 Linq [关闭]
【发布时间】:2013-11-04 16:01:22
【问题描述】:

我有 3 个下拉列表和一个搜索按钮。下拉菜单提供搜索条件。 因此,这些值可以是全部、很少或没有。 T-sql 存储过程将如下所示。是否可以为此编写一个 linq。

Select customerId, productId, supplierId
From Orders
Where ( customerId = @customerId Or @customerId IS NULL )
  And ( productId = @productId Or @productId IS NULL )
  And ( supplierId= @supplierId Or @supplierId IS NULL )

我正在使用 .Net 4.0,实体数据模型

【问题讨论】:

标签: c# linq


【解决方案1】:

这是一个非常简单的查询,如果您不完全确定如何在 LINQ 中执行操作,请查看 Microsoft 的 LINQ 101 samples。它们提供了关于使用 LINQ 执行的常见任务的简单一目了然的参考。

只是从臀部射击;假设您有 productIdcustomerIdsupplierId 的变量,下面的代码应该可以工作。

using(var db = new YourDbContext())
{
    var results = db.Orders.Where(o => 
            (customerId == null || o.CustomerId == customerId) 
            && (productId == null || o.ProductId == productId) 
            && (supplierId == null || o.SupplierId == supplierId))
        .Select(o => new { o.CustomerId, o.ProductId, o.SupplierId }).ToList();
}

【讨论】:

  • 注意原来的SQL说的是@customerId IS NULL,而不是customerId IS NULL...
  • 谢谢。很晚了,没听懂。
  • 非常感谢。那行得通
【解决方案2】:

使用 LINQ,您可以仅在实际需要时添加 Where 子句:

var o = context.Orders;

if (userHasChosenACustomerId)
{
    o = o.Where(o => o.CustomerId == theChosenCustomerId);
}

if (userHasChosenAProductId)
{
    o = o.Where(o => o.ProductId == theChosenProductId);
}    ...

var result = o.ToList();

这可能比ORs 更清楚地传达您的意图。 (用下拉 UI 控件的适当方法替换 userHasChosenACustomerIdtheChosenCustomerId。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多