在 NET.Core 中构建 multiple/single 条件搜索函数(IQueryable 或 IEnumerable)
Building a multiple/single condition search function in NET.Core (IQueryable or IEnumerable)
我是 C# 编码的初学者(实际上是一般编码),我正在尝试创建一个网站来同时在 SQL 服务器数据库中搜索多个 and/or 单一条件。到目前为止,对于单一条件,它就像一个魅力,而且速度非常快,但到目前为止我还无法呈现多条件搜索。我到处寻找可能的解决方案,但还是空手而归,因为我还不知道如何实现它,或者因为有些方法似乎不再有效,包括多个 where 子句、&& 和 | | where 子句和几个 Microsoft 教程中的运算符。
这是我的控制器:
var Projektdokumenter = from p in _context.ProjekterDokutypeDokuundertype
.Include(p => p.Dokumenttype)
.Include(p => p.Dokuundertype)
.Include(p => p.Forfatter)
.Include(p => p.P)
.Include(p => p.Sprog)
select p;
if (!String.IsNullOrEmpty(searchString) || (searchProject) != null)
{
if (!String.IsNullOrEmpty(searchString))
{
return View(Projektdokumenter.Where(p => p.Forfatter.Initialer.Contains(searchString)).ToList());
}
{
if (searchProject.HasValue)
{
return View(Projektdokumenter.Where(p => p.P.ProjektId.Equals(searchProject)).ToList());
}
}
}
这是我的观点
<form asp-action="Index" method="get">
<div>
<p>
Forfatter Initialer: <input type="text" name="searchString" value"" />
Projekt ID: <input type="number" name="searchProject" value"" />
<input type="submit" value="Search" class="btn btn-primary" />
<a asp-action="Index">Remove Filter</a>
</p>
</div>
</form>
创建一个模型来保存数据。将其命名为 SearchResult 或其他名称。
在表单中,您可以有多个搜索字符串,您可以将它们组合起来发送给方法。
创建一个 IQueryable
IQueryable<ProjekterDokutypeDokuundertype> result =
_context.ProjekterDokutypeDokuundertype
.Include(p => p.Dokumenttype)
.AsNoTracking();
if (!string.IsNullOrWhitespace(dokumentNavn))
{
result = result.Where(d => d.DokumentNavn == dokumentNavn);
}
if (!string.IsNullOrWhitespace(forfatterNavn))
{
result = result.Where(d => d.Forfatter == forfatterNavn);
}
var searchResult = await result.Select(s => new SearchResult { Forfatter = s.Forfatter, DokumentNavn = s.DokumentNavn}).ToListAsync();
您可以像下面这样更改您的控制器(假设您的 searchProject
是 int 类型,我建议您将方法更改为 post):
public IActionResult Index(string searchString,int searchProject)
{
var Projektdokumenter = from p in _context.ProjekterDokutypeDokuundertype
.Include(p => p.Dokumenttype)
.Include(p => p.Dokuundertype)
.Include(p => p.Forfatter)
.Include(p => p.P)
.Include(p => p.Sprog)
select p;
if (!String.IsNullOrEmpty(searchString) ^ searchProject!= 0)
{
if (!String.IsNullOrEmpty(searchString))
{
var c = Projektdokumenter.Where(p => p.Forfatter.Initialer.Contains(searchString)).ToList();
return View(c);
}
{
if (searchProject!=0)
{
var d = Projektdokumenter.Where(p => p.P.ProjektId.Equals(searchProject)).ToList();
return View(d);
}
}
}
var e = Projektdokumenter.Where(p => p.Forfatter.Initialer.Contains(searchString) && p.P.ProjektId.Equals(searchProject)).ToList();
return View(e);
}
我是 C# 编码的初学者(实际上是一般编码),我正在尝试创建一个网站来同时在 SQL 服务器数据库中搜索多个 and/or 单一条件。到目前为止,对于单一条件,它就像一个魅力,而且速度非常快,但到目前为止我还无法呈现多条件搜索。我到处寻找可能的解决方案,但还是空手而归,因为我还不知道如何实现它,或者因为有些方法似乎不再有效,包括多个 where 子句、&& 和 | | where 子句和几个 Microsoft 教程中的运算符。
这是我的控制器:
var Projektdokumenter = from p in _context.ProjekterDokutypeDokuundertype
.Include(p => p.Dokumenttype)
.Include(p => p.Dokuundertype)
.Include(p => p.Forfatter)
.Include(p => p.P)
.Include(p => p.Sprog)
select p;
if (!String.IsNullOrEmpty(searchString) || (searchProject) != null)
{
if (!String.IsNullOrEmpty(searchString))
{
return View(Projektdokumenter.Where(p => p.Forfatter.Initialer.Contains(searchString)).ToList());
}
{
if (searchProject.HasValue)
{
return View(Projektdokumenter.Where(p => p.P.ProjektId.Equals(searchProject)).ToList());
}
}
}
这是我的观点
<form asp-action="Index" method="get">
<div>
<p>
Forfatter Initialer: <input type="text" name="searchString" value"" />
Projekt ID: <input type="number" name="searchProject" value"" />
<input type="submit" value="Search" class="btn btn-primary" />
<a asp-action="Index">Remove Filter</a>
</p>
</div>
</form>
创建一个模型来保存数据。将其命名为 SearchResult 或其他名称。
在表单中,您可以有多个搜索字符串,您可以将它们组合起来发送给方法。
创建一个 IQueryable
IQueryable<ProjekterDokutypeDokuundertype> result = _context.ProjekterDokutypeDokuundertype .Include(p => p.Dokumenttype) .AsNoTracking(); if (!string.IsNullOrWhitespace(dokumentNavn)) { result = result.Where(d => d.DokumentNavn == dokumentNavn); } if (!string.IsNullOrWhitespace(forfatterNavn)) { result = result.Where(d => d.Forfatter == forfatterNavn); } var searchResult = await result.Select(s => new SearchResult { Forfatter = s.Forfatter, DokumentNavn = s.DokumentNavn}).ToListAsync();
您可以像下面这样更改您的控制器(假设您的 searchProject
是 int 类型,我建议您将方法更改为 post):
public IActionResult Index(string searchString,int searchProject)
{
var Projektdokumenter = from p in _context.ProjekterDokutypeDokuundertype
.Include(p => p.Dokumenttype)
.Include(p => p.Dokuundertype)
.Include(p => p.Forfatter)
.Include(p => p.P)
.Include(p => p.Sprog)
select p;
if (!String.IsNullOrEmpty(searchString) ^ searchProject!= 0)
{
if (!String.IsNullOrEmpty(searchString))
{
var c = Projektdokumenter.Where(p => p.Forfatter.Initialer.Contains(searchString)).ToList();
return View(c);
}
{
if (searchProject!=0)
{
var d = Projektdokumenter.Where(p => p.P.ProjektId.Equals(searchProject)).ToList();
return View(d);
}
}
}
var e = Projektdokumenter.Where(p => p.Forfatter.Initialer.Contains(searchString) && p.P.ProjektId.Equals(searchProject)).ToList();
return View(e);
}