c # Nhibernate создать запрос с динамическими параметрами - PullRequest
0 голосов
/ 20 ноября 2018

с использованием следующих методов расширения:

    public static void SetParameters(this IQuery query, List<object> Parameters) {
        for (int i = 0; i < Parameters.Count(); i++) {
            query.SetParameter(i, Parameters[i]);
        }
    }
    public static IQuery SetQuery(this ISession session, string Query, object[] Parameters) {
        return session.CreateSQLQuery(Query + string.Empty + "(" + ParseExt(Parameters) + ")");
    }

    private static string ParseExt(object[] Parameters) {
        var str = new List<string>();
        for (int i = 0; i < Parameters.Length; i++) {
            str.Add(":" + i);
        }
        return string.Join(",", str);
    }

Я создаю запрос:

  • public IEnumerable<T> Execute<T>(string Query, params dynamic[] Parameters) {
        using (var _session = _transactionManager.GetSession()) {
            var _cmd = _session.SetQuery(Query, Parameters);
            if (Parameters != null) {
                _cmd.SetParameters(Parameters.ToList());
            }
            return _cmd.List<T>();
        }
    }
    

выдает следующую ошибку:

Remember that ordinal parameters are 1-based!

ПРИМЕЧАНИЕ: я пытался изменить индекс, чтобы начать с 1

1 Ответ

0 голосов
/ 21 ноября 2018

Символ для параметра положения не :xxx, а ?.

Это изменение будет работать

private static string ParseExt(object[] Parameters) {
    var str = new List<string>();
    for (int i = 0; i < Parameters.Length; i++) {
        //str.Add(":" + i);
        str.Add("?"); // + i);
    }
    return string.Join(",", str);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...