A może jest lepszy sposób.Czy mogę przekazać w T.Property? Pomysły na ulepszenie tej metody?
Buduję dynamiczny generator zapytań dla NHibernate, nie chcemy umieszczać HQL bezpośrednio w aplikacji, chcemy, aby był jak najbardziej agnostyczny. Wygląda to obecnie:
public override IEnumerable<T> SelectQuery(Dictionary<string, string> dictionary)
{
string t = Convert.ToString(typeof (T).Name);
string criteria = string.Empty;
foreach (KeyValuePair<string, string> item in dictionary)
{
if (criteria != string.Empty)
criteria += " and ";
criteria += item.Key + " = '" + item.Value + "'";
}
string query = " from " + t;
if (criteria != string.Empty)
query += " where " + criteria;
return FindByHql(query);
}
ok, super, jednak .... istnieją dwie rzeczy tutaj, które stwarzają problem:
Ta kwerenda zajmuje się tylko „i” mój początkowy myślą jest zbudować metodę dynamicznego budowania słownika, który przyjmuje nazwę właściwości, wartość i operatora "i" lub "lub" i buduje słownik wraz z szeregiem operatorów. Czy to brzmi jak właściwa rzecz?
OK, to działa GREAT, ale gdy jest liczba całkowita, to zawodzi z powodu pojedynczych cudzysłowów. To, co myślę, że będzie NAJLEPSZĄ drogę, to że słownik zaakceptuje
<T.Property, string>
, a następnie przejdzie do T.Property, aby znaleźć typ danych i odpowiednio się zachowywać. Czy to komplikuję?
Dziękuję.
Kiedyś to chyba ja zniósł Słownika wszystko razem i po prostu dodaje „obiekt” jako ciąg do klasy QueryObject. Dzięki! –