Wil*_*ead 9 c# linq asp.net controllers
我正在设计一个由MVC应用程序使用的Web服务(非常简单的东西),但我需要在Web服务中使用一个方法,该方法最多需要四个可选参数(即catId,brandId,lowestPrice和highestPrice).
如何编写Linq查询以使其基本上执行
databaseObject.Products.Where(p=> (p.Category == ANY if catId==null, else catId))
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的.
Mar*_*cik 17
该方法的参数可以接受空值,并且可以为每个非null参数计算Where限制:
IQueryable<Product> q = databaseObject.Products;
if (catId != null)
{
q = q.Where(p => p.Category == catId);
}
if (brandId != null)
{
q = q.Where(p => p.Brand == brandId);
}
// etc. the other parameters
var result = q.ToList();
Run Code Online (Sandbox Code Playgroud)
如果这是Linq To SQL:
databaseObject.Products.Where(p=> (catId == null || p.Category == catId) );
Run Code Online (Sandbox Code Playgroud)
Linq To SQL,如果CatId为null,则有效地将发送到后端的SQL写入而不使用where子句.您可以拥有多个这样的构造,只有那些具有nonNull值的构造才包含在where构造中.
databaseObject.Products.Where(p=> ((catId==null) || (p.Category == catId)))
Run Code Online (Sandbox Code Playgroud)
对于其他3个可选参数,您可以将它们相加,并在一个linq语句中进行整个搜索。