Jak napisać zapytanie LINQ z nazwą kolumny jako parametr nadal w bezpieczny sposób
Szukam pomocy, jak to osiągnąć za pomocą LINQ w bezpieczny sposób.
Muszę przeprowadzić wyszukiwanie w tabeli „Performance” z wieloma kolumnami. Na podstawie kryteriów określonych dla wyszukiwania muszę wybrać kolumny i przeprowadzić wyszukiwanie w tych kolumnach z podanymi wartościami.
private static IQueryable<Investment> PerformanceSearch(IQueryable<Investment> investments, **??? searchColumn**, double minValue, double maxValue)
{
var entity = ExtendedEntities.Current;
investments = from inv in entity.Investments
join performance in entity.Performances on inv.InvestmentID equals perfromance.InvestmentID
where **performance.searchColumn** >= minValue && **performance.searchColumn** = maxValue
return investments;
}
Teraz szukam twojej pomocy na:
Jak przekazać kolumnę „searchColumn” tej metodzie w bezpieczny sposób? Myślałem o stworzeniu obiektu słownika, aby pomieścić jakiś sposób na utrzymanie nazw kolumn ze struktury encji. Ale nie wiem, jak to osiągnąć.
Jak wykonać kwerendę LINQ za pomocą parametru columnName i zastosować klauzulę where.
Nie mogę użyć przypadku If Else lub Switch, jak poniżej, to lista możliwych kolumn wyszukiwania ...
/*
* Search Columns can be:
* "Return1Month", "Return2Months", "Return3Months", ... almost 10 more and
* "Risk1Month", "Risk2Months", "Risk3Months", ... almost 10 more and
* "TrackingError1Month", "TrackingError2Months", "TrackingError3Months", ... almost 10 more and
* 2 more similar set of columns ...
*/
Spędziłem czas na Stackoverflow, Microsoft i innych blogach i rozważałem użycie Dynamic LINQ, ale nie jest to bezpieczne. Towydaje się że można to osiągnąć za pomocą wyrażeń, ale nie udało się tego osiągnąć.
Wszelkie porady są mile widziane.
EDYTOWAĆ -
Kolejny element, o którym należy wspomnieć - wszystkie kolumny wyszukiwania są obecne w tabeli „wydajność”.