具有多个条件的Linq

时间:2013-11-04 07:15:18

标签: c# linq

我有3个下拉列表和一个搜索按钮。下拉列表提供搜索条件。 因此,值可以是全部,很少或不是。 T-sql存储过程将是foll。是否可以为此编写一个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,实体数据模型

2 个答案:

答案 0 :(得分:6)

这是一个非常简单的查询,如果您不完全确定如何在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();
}

答案 1 :(得分: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更清楚地传达您的意图。 (使用下拉UI控件的相应方法替换userHasChosenACustomerIdtheChosenCustomerId。)