J'ai 3 méthodes qui sont presque exactement identiques:Comment passer une expression à une méthode comme une variable?
protected DetachedCriteria GetAvailableFundIdsPerDataUniverse()
{
return GetAvailableIdsPerDataUniverse()
.SetProjection(LambdaProjection.Property<Fund>(f => f.Id));
}
protected DetachedCriteria GetAvailableCompanyIdsPerDataUniverse()
{
return GetAvailableIdsPerDataUniverse()
.SetProjection(LambdaProjection.Property<Fund>(f => f.Company.Id));
}
protected DetachedCriteria GetAvailableCategoryIdsPerDataUniverse()
{
return GetAvailableIdsPerDataUniverse()
.SetProjection(LambdaProjection.Property<Fund>(f => f.Category.Id));
}
où GetAvailableIdsPerDataUniverse()
est défini comme:
protected DetachedCriteria GetAvailableIdsPerDataUniverse()
{
return DetachedCriteria.For<Fund>()
.SetFetchMode<Fund>(f => f.ShareClasses, FetchMode.Join)
.CreateCriteria<Fund>(f => f.ShareClasses)
.Add(LambdaSubquery.Property<ShareClass>(x => x.Id).In(GetAvailableShareClassIdsPerDataUniverse()))
.Add<ShareClass>(f => f.ExcludeFromFT == false);
}
Pour chaque méthode, la seule différence est l'expression qui est utilisée pour sélectionner les données, à savoir
f => f.Id
, f => f.Company.Id
et f => f.Category.Id
Est-ce que quelqu'un pourrait me dire s'il est possible de passer ces différences en GetAvailableIdsPerDataUniverse()
en tant que variable, donc je ne peux avoir qu'une seule méthode au lieu d'en avoir 4?
Merci @desco, mais cela donne l'erreur 'Le type non générique 'NHibernate.Criterion.Expression' ne peut pas être utilisé avec des arguments de type'. Avez-vous déjà vu ça? Savez-vous comment je peux résoudre cela? – DaveDev
Utilisez le nom complet du type (System.Linq.Expressions.Expression> e) –
desco
Merci desco, j'ai effectivement figuré le 'object' au lieu de' int' moi-même il ya quelques minutes et tout fonctionne parfaitement. Je n'aurais jamais été aussi loin sans votre aide. Cela va m'aider à réduire la quantité de code dont j'ai besoin pour écrire de façon exponentielle! – DaveDev