我有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,实体数据模型
答案 0 :(得分:6)
这是一个非常简单的查询,如果您不完全确定如何在LINQ中执行操作,请查看Microsoft的LINQ 101 samples。它们提供了一个简单的参考LINQ执行的常见任务的参考。
从臀部射击;假设您有productId
,customerId
和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();
}
答案 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控件的相应方法替换userHasChosenACustomerId
和theChosenCustomerId
。)