在 Linq 和 C# 中使用 AND/OR 选项创建搜索方法
本文关键字:OR 选项 创建 方法 搜索 AND Linq | 更新日期: 2023-09-27 18:31:31
我正在尝试创建一些方法,用于使用 c# 和 asp.net mvc 4 (linq) 在 databese 中搜索和过滤数据
public ActionResult Search_Names_Using_Location(string b,string d, int c=0,int Id=0)
{
ViewBag.Locations = db.Locations.ToList();
var agentlocation = new AgentLocationViewModel();
agentlocation.agents = new List<Agent>();
agentlocation.agents = (from a in db.Agents
where a.LocationId == Id
&& (a.LocationName == b)
&& (a.age > c )
select a).ToList();
return View(agentlocation);
}
问题是用户可以让一些 texbox 为空,因此 Id 或 a 或 b 的值可以为 null,因此查询将一无所获。
他们有什么建议吗(如果有的话,我可以去,但如果我有 7 或 8 个字符串,那就很难了)?
您可以在查询中检查null
public ActionResult Search_Names_Using_Location(string b,string d,
int c=0,int Id=0,)
{
ViewBag.Locations = db.Locations.ToList();
var agentlocation = new AgentLocationViewModel();
agentlocation.agents = new List<Agent>();
var noId = string.IsNullOrWhitespace(Id);
var noB = string.IsNullOrWhitespace(b);
agentlocation.agents = (from a in db.Agents
where (noId || a.LocationId == Id)
&& (noB || a.LocationName == b)
&& (a.age > c )
select a).ToList();
return View(agentlocation);
}
如果你有 AND 条件,只有你可以使用
var query = db.Agents;
if (Id != 0)
{
query = query.Where(x => x.LocationId == Id)
}
if (!string.IsNullOrWhitespace(b))
{
query = query.Where(x => x.LocationName == b)
}
...
变量结果 = 查询。ToList();实际数据库调用
这将消除无用的empty
条件,例如WHERE (0 = 0 OR LocationId = 0)
如果是OR条件和组合,你可以看看PredicateBuilder因此,您可以使用 Or 和 And 谓词组合,如下所示:
IQueryable<Product> SearchProducts (params string[] keywords)
{
var predicate = PredicateBuilder.False<Product>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or (p => p.Description.Contains (temp));
}
return dataContext.Products.Where (predicate);
}