如何根据是否提供值来编写Linq

0 c# linq entity-framework-4

我试图用一些可选的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

Jon*_*eet 5

这很简单:

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)

这是有效的,因为查询组合得很好 - 而且它们实际上只代表查询; 只有当您尝试从中获取查询实际执行的数据时.