Я скажу вам в другой раз, когда это случается, о чем большинство не знают.Если у вас есть два столбца с одинаковым именем, но другого типа, вы столкнетесь с этой проблемой.Например, предположим, что вы выполняете объединение на основе некоторого идентификатора, и ваш результирующий набор выглядит как
Id, Name, CreatedDate, Id, ExpirationDate
, если тип данных первого столбца идентификатора - уникальный идентификатор, а тип данных второго столбца идентификатора -int, вы получите
Input string 'f49f503d-70d5-4fbb-8aa2-a0bd0113ff4d' was not in
the correct format. ----> System.InvalidCastException :
Unable to cast object of type 'System.Guid' to type 'System.IConvertible'.
, потому что NHibernate будет смешивать два столбца, поскольку они имеют одинаковое имя / ключ.Чтобы решить эту проблему, просто присвойте своим столбцам уникальные имена через псевдоним:
select Id as IDOne, Name, CreatedDate, Id as IDTwo, ExpirationDate
from Table1 t
join Table2 t2
on t.Name = t2.Name
, и это должно решить любые проблемы, которые у вас возникли с методом .List ().
ПРИМЕЧАНИЕ: Список () не следует путать со списком в NHibernate.Один строго типизирован, а другой, конечно, нет.Список также будет автоматически анализировать набор результатов для вас, вместо того, чтобы возвращать вам слабо типизированный IList.В моем случае я использую просто старый List ().