我希望对具有可变搜索条件但在C#代码中的产品执行“动态SQL”搜索。例如,产品定义如下:
class Product
{
public decimal Price { get; set; }
public int Quantity { get; set; }
}
我的搜索控件有一个价格文本框和一个数量文本框。如果用户指定了某些内容,则应将其包含在搜索中(否则不包括在内)。实际上,我的产品有超过2个属性。
如何根据变量条件的任何此类搜索一般构建lambda表达式?
谢谢!
答案 0 :(得分:8)
不是构建lambda表达式,而是逐位构建查询:
IQueryable<Product> productQuery = db.Products;
if (userHasSpecifiedPrice)
{
productQuery = productQuery.Where(p => p.Price == userSpecifiedPrice)
}
// etc
请注意,在您开始使用结果之前,这不会执行查询。
查询组合是LINQ的主要优势之一。 (不幸的是,表达式树组合 - 如果你想要一次Where
调用,你需要做的就是这样做了。)