Telerik Grid <-> Nhibernate - PullRequest
       1

Telerik Grid <-> Nhibernate

1 голос
/ 08 сентября 2011

Я недавно начал использовать сетки telerik (для ASP.NET MVC).«Механизм выражений на основе Linq» выполняет всю тяжелую работу за вас: разбиение по страницам, сортировка и фильтрация.Его просто нужно подключить с помощью метода репозитория, подобного следующему:

public IEnumerable GetBlas () {return Session.Query ();}

У меня сейчас следующая проблема.Я хотел бы использовать ICriteria и Restrictions.In ("x", list.ToArray ()), где список имеет тип IList и заполняется другим процессом.Проблема состоит в том, что список может содержать сотни значений, и это может вызвать исключение, поскольку сгенерированный код SQL 'IN PART' (например, IN (1, 2, ....., 10000)) может быть слишком длинным.

Есть ли способ реализовать это, не переключаясь на чистый SQL и не обрабатывая все строки запросов и т. Д., Которые отправляет сетка Telerik?Надеюсь, что это имеет смысл.

Спасибо.

Кристиан

1 Ответ

2 голосов
/ 08 сентября 2011

Идея состоит в том, чтобы разделить список из 10 000 элементов на более мелкие списки, скажем, по 1000 элементов в каждом.
Самый простой способ выполнить запрос - использовать ICriteria, где вы можете добавить столько Disjunction скак вам нужно для каждой подгруппы у вас есть.

Если ICriteria не является опцией, может быть обходной путь, когда вы создаете несколько запросов Future, например, так (проверенный код, который выполняет только 1 обходной путь в БД):

string [] names = {"boris", "admin", "scheduleuser"}, moreNames = {"adminuser"};
var x = session.Query<User>()
                .Where(u => names.Contains(u.Name)).ToFuture();

var y = session.Query<User>()
                .Where(u => moreNames.Contains(u.Name)).ToFuture();

var res = x.Union(y);

log.DebugFormat("found {0} users. 1st user is : {1}", res.Count(), res.Count() > 0 ? res.First().FullName : "none");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...