我創建了一個大過濾器,它從我的前端獲取資料,將它與資料庫進行比較并回傳正確的人。我的第一個問題是我認為我的解決方案不正確,因為后來我也需要和操作。我的 FilterByItem 子句也阻止了自己(在下面的代碼中注釋)。
我的過濾器看起來像這樣:
//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());
}
看起來我需要一部分一部分而不是像我那樣做,但我不知道我應該如何正確地做到這一點。
uj5u.com熱心網友回復:
我會做這樣的事情。我沒有重構你的整個查詢,但我給了你如何做的想法:
[HttpPost("filter/")]
public async Task<IActionResult> Filter([FromBody] Filter user)
{
var baseQuery = _context.Personens.AsQueryable();
if (!string.IsNullOrEmpty(user.vorname))
baseQuery = baseQuery.Where(p => p.Vorname.ToLower().Contains(user.vorname));
if (!string.IsNullOrEmpty(user.nachname))
baseQuery = baseQuery.Where(p => p.Nachname.ToLower().Contains(user.nachname));
if (!string.IsNullOrEmpty(user.anrede))
baseQuery = baseQuery .Where(p => p.Anrede.ToLower().Contains(user.anrede))
....
var result = await (baseQuery.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());
return Ok(result)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360031.html
