在 ASP.NET MVC 应用程序中,您的用户输入很可能来自正在发布到服务器的表单。在这种情况下,您可以使用具有[Required]
必须提供的标准的视图模型来使用强类型视图。然后你把你的方法包装进去if (ModelState.IsValid) { ... }
,你就排除了用户没有给你他们需要的东西的所有情况。
除此之外,如果您可以将条件收集到列表中,则可以对其进行过滤。所以,你可以这样做:
filterBy = userValues.Where(v => v != null);
var Coll = (from obj in table where filterBy.Contains(value1) select obj);
Dictionary
您可以通过使用包含用户输入值的(或Lookup
用于非唯一键的)以及一些标签(可能是一个标签)来使这更加复杂,该标签enum
告诉您他们正在过滤哪个字段,然后您可以对它们进行分组通过该标签分离出每个字段的过滤器,然后按上述方式过滤。您甚至可以拥有一个SearchFilter
包含其他信息的自定义对象,因此您可以使用 AND、NOT 和 OR 条件的过滤器...
如果做不到这一点,您可以记住,在您触发对 an 的评估之前IQueryable
,它不会命中数据库,因此您可以这样做:
var Coll = (from obj in table where value1 == requiredCriteria select obj);
if(criteria1 != null)
{
query = query.Where(x => x.Value1 == criteria1);
}
//etc...
if(criteria5 != null)
{
query = query.Where(x => x.Value5 == criteria5);
}
return query.ToList();
第一行应用了必须存在的任何标准;如果没有任何强制性的,那么它可能只是var Coll = table;
. 这将添加将应用提供的任何条件,将忽略任何不提供的条件,您会捕获所有可能的组合,并且最后只进行一个查询.ToList()
。