У меня есть этот поиск в группе ResultId по символу. У меня есть Linq запрос ниже, но я не могу сделать SQL в выписке с помощью Содержать(), который является состоянием этой должности http://blog.wekeroad.com/2008/02/27/creating-in-queries-with-linq-to-sqlЗаявление SQL IN в Linq для NHibernate
// This will group ResultIds (Guid) by their symbol (string).
var asd = ResultIdsAndSymbols.ToLookup(x => x.Symbol, y => y.ResultID);
foreach (var qwe in asd)
{
var Numbers = (from t in Session.Query<TableName>()
where qwe.Contains(t.ResultID)
select t.Number).ToList();
}
Update:
После повтора этого кода и глубокого анализа ошибки (System.InvalidCastException: объект должен реализовать IConvertible), я получил это информативное сообщение об ошибке: «Не удалось преобразовать значение параметра из группировки в указатель». qwe
- это тип IGrouping<string, Guid>
, и он станет IEnumerable<Guid>
, который не должен быть проблемой, как мы передаем это в конструктор или используется в инструкции foreach
. Исключение составляет System.Data.SqlClient
. Я думаю, что NHibernate просто передает Grouping<TKey, TElement>
в параметр sql, который вызывает ошибку. NHibernate должен быть предназначен для перечисления на любой номер IEnumerable<T>
и генерации запроса SQL IN так же, как и для List<T>
.
List<T>
, Array [], Stack
хорошо работать. Так что я изменить код для этого: сообщил Issue::
where qwe.ToList().Contains(t.ResultID)
Update https://nhibernate.jira.com/browse/NH-2762
В докладе ссылка вопрос вы предоставили не работает. –
Наверное, они переезжают в облако Джира. Я обновляю ссылку, но это не популярная ошибка, и они просто не разрешены. Однако @Aaronaught сказал, что он исправлен на v3.2 ниже. – CallMeLaNN
Ссылка работает ОК – PandaWood