Je rencontre un problème de filtrage de source dans le client NEST.Source de filtrage NEST et création d'instances d'objet à l'aide du constructeur d'objet
Ceci est mon exemple de code:
var searchRequest = client.Search<Report>(analysisDescriptor
.Source(s => s
.Includes(i => i
.Fields(
f => f.ReportId,
f => f.Abstract,
f => f.Title
)
)
)
.Size(10));
Où analysisDescriptor
est new SearchDescriptor<Report>()
avec la logique métier pour la recherche de texte.
C'est ma classe avec constructeur:
Maintenant la questionpublic class Report
{
public Report(int reportId, string itemAbstract, string title)
{
Abstract = itemAbstract;
ReportId = reportId;
Title = title;
/* Other fields */
}
public int ReportId { get; }
public string Abstract { get; }
public string Title { get; }
/* Other fields */
}
est que conduit tech ne veulent pas avoir set
propriétés et que vous souhaitez avoir un constructeur à la place.
Le code ci-dessus près œuvres:
- reportId est attribué
- titre est attribué
Le problème est que Abstract
champ n'est pas affecté parce que le constructeur l'a déclaré itemAbstract
. Cela a été fait parce que abstract
est un mot-clé réservé en C#. Si je change le nom du champ dans le constructeur à @abstract
- cela fonctionne, mais ne semble pas juste parce que je dois utiliser le mot-clé réservé.
Changement Abstract
à ItemAbstract
ne semble pas une option parce que nous l'avons comme ça dans la base de données et cela nécessiterait encore plus de changements.
Donc, idéalement, je suis à la recherche d'un moyen de passer champ Abstract
de mon searchRequest
dans le constructeur Report
comme itemAbstract
. J'espère que cela a du sens.
Je suis ouvert à toute autre solution qui est propre et logique.
A travaillé comme un charme! –