У меня есть этот поиск для группы ResultId по символу.У меня есть запрос Linq ниже, но я не могу сделать SQL IN оператор с помощью Contain (), который является состояние этого сообщения http://blog.wekeroad.com/2008/02/27/creating-in-queries-with-linq-to-sql
// 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();
}
Обновление:
Послеповторяя этот код и глубоко анализируя ошибку (System.InvalidCastException: объект должен реализовывать IConvertible), я получил это информативное сообщение об ошибке: "Не удалось преобразовать значение параметра из группировки в Guid" .qwe
- это тип IGrouping<string, Guid>
, и он станет IEnumerable<Guid>
, что не должно быть проблемой, поскольку мы передаем это в конструктор List
или используем в операторе foreach
.Исключение, выброшенное в System.Data.SqlClient
.Я думаю, что NHibernate просто передает Grouping<TKey, TElement>
в параметр sql, который вызывает ошибку.NHibernate должен быть спроектирован так, чтобы перечислять любые IEnumerable<T>
и генерировать запрос SQL IN так же, как он делает для List<T>
.
. List<T>
, Array [], Stack
работают хорошо.Поэтому я изменяю код на это:
where qwe.ToList().Contains(t.ResultID)
Обновление: Сообщение о проблеме: https://nhibernate.jira.com/browse/NH-2762