-3

我有 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,实体数据模型

4

2 回答 2

6

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

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

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();
}
于 2013-11-04T07:26:29.193 回答
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();

OR这可能比s更清楚地传达您的意图。(将userHasChosenACustomerId和替换theChosenCustomerId为下拉 UI 控件的适当方法。)

于 2013-11-04T07:28:46.683 回答