【发布时间】:2021-12-28 11:46:39
【问题描述】:
我创建了一个大过滤器,它从我的前端获取数据,将其与数据库进行比较并返回正确的人。我的第一个问题是我认为我的解决方案不正确,因为后来我也需要和操作。我的 FilterByItem Clauses 也阻止了自己(在下面的代码中注释)。
我的过滤器如下所示:
//Login
[HttpPost("filter/")]
public async Task<IActionResult> Filter([FromBody] Filter user)
{
//Variable für Personentypen als Liste machen
return Ok(await _context
.Personens
//Obere Felder (nicht erweitert)
.Where(p => p.Vorname.ToLower().Contains(user.vorname))
.Where(p => p.Nachname.ToLower().Contains(user.nachname))
.Where(p => p.Anrede.ToLower().Contains(user.anrede))
.Where(p => p.Ort.ToLower().Contains(user.adresse) || p.Plz.Contains(user.adresse) ||
p.Land.Contains(user.adresse) || p.Bundesland.Contains(user.adresse) ||
p.Straße.Contains(user.adresse))
.Where(p => p.Firmenbezeichnung.ToLower().Contains(user.firmenbezeichnung))
.FilterByItems(user.personenTypFilter, (m, k) => m.Personentypzuordnungens.Any(i => i.Personentyp.Bezeichnung.Contains(k)), true) (Works if this is the only FilterByItems)
//Merkmale
//Fachtypen
.FilterByItems(user.fachtypenFilter, (m, k) => m.Fachtypzuordnungens.Any(i => i.Fachtyp.Bezeichnung.Contains(k)), true) // If this one is not set in the frontend, the whole filter dont work anymore
.Select(p => new
{
personId = p.PersonId,
nachname = p.Nachname,
vorname = p.Vorname,
plz = p.Plz,
firmBez = p.Firmenbezeichnung,
ort = p.Ort,
personentyp = p.Personentypzuordnungens.Select(i => new
{
personentypId = i.PersonentypId,
}),
aktuellePosition = p.AktuellePosition,
taetigkeit = p.Tätigkeit,
kernkompetenzen = p.Kernkompetenzen,
datenReviewedZeitpunkt = p.DatenReviewedZeitpunkt,
}).ToListAsync());
}
看来我需要一部分一部分地做,而不是像我做的那样,但我不知道我应该如何正确地做到这一点。
【问题讨论】:
-
p.Vorname.ToLower().Contains(user.vorname)不能使用索引。您应该将列的排序规则更改为不区分大小写,然后进行正常比较
标签: .net linq entity-framework-core