我试图用一些可选的where子句编写一个LINQ语句.这是为了搜索.用户可以选择特定站点来搜索或搜索所有站点:
var query =
_db.STEWARDSHIP
.OrderBy(r => r.SITE.SITE_NAME)
.Where(r => r.SITE_ID == SiteId)
.Where(r => r.VISIT_TYPE_VAL.VISIT_TYPE_ID == VisitTypeId)
.Select(r => new
{
id = r.STEWARDSHIP_ID,
name = r.SITE.SITE_NAME,
visit_type = r.VISIT_TYPE_VAL.VISIT_TYPE_DESC,
visit_date = r.VISIT_DATE
});
return query;
Run Code Online (Sandbox Code Playgroud)
因此,当方法获得SiteId = 14时,没问题.但是,当它获得SiteId = null时,则不应考虑where子句.
谢谢Eric
这很简单:
var query = _db.STEWARDSHIP.OrderBy(r => r.SITE.SITE_NAME);
if (SiteId != null)
{
query = query.Where(r => r.SITE_ID == SiteId);
}
query = query.Where(r => r.SITE.SITE_TYPE_VAL.SITE_TYPE_ID == SiteTypeId)
.Select(r => new
{
id = r.STEWARDSHIP_ID,
name = r.SITE.SITE_NAME,
visit_type = r.VISIT_TYPE_VAL.VISIT_TYPE_DESC,
visit_date = r.VISIT_DATE
});
return query;
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为查询组合得很好 - 而且它们实际上只代表查询; 只有当您尝试从中获取查询实际执行的数据时.