Проблема приведения с LINQ - PullRequest
2 голосов
/ 13 апреля 2010

Я пытаюсь получить список типов моих продуктов в Linq.

var types = (from t in NHibernateSession.Linq<Product>()
             select t.ProductType).Distinct().ToList<ProductType>();         
return types;

Но это дает Невозможно привести объект типа ошибка

'... Domain.Product' для ввода '... Domain.ProductType'.

ProductType является собственностью Product.

<many-to-one name="ProductType" class="Portal.Domain.ProductType, TilePortal.Domain" column="ProductTypeID" not-null="true" ></many-to-one>

Редактировать: Похоже, что Linq для Nhibernate не достаточно зрелый, чтобы обрабатывать такие запросы. Я просто хочу иметь возможность создавать простой SQL-запрос, который будет извлекать отдельные ProductType из БД, не принося все продукты, которые не нужны для производственной базы данных, содержащей миллионы продуктов. Так что, если вы можете проиллюстрировать, как это сделать, используя HQL os Criteria API, это тоже подойдет ..

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Возможно, у вас возникла проблема с реализацией nHibernate LINQ. Вы получаете ту же ошибку с:

 var types = (from t in NHibernateSession.Linq<Product>()
              select t.Type);

Если нет, что происходит, когда вы пытаетесь использовать неуниверсальный ToList()?

 var types = (from t in NHibernateSession.Linq<Product>()
              select t.Type).Distinct().ToList();

Кроме того, я бы вообще избегал создания класса с именем, конфликтующим с чем-либо в среде .NET, особенно такого базового, как Type. Это может привести только к путанице. Возможно, вам следует переименовать его в ProductType.

1 голос
/ 13 апреля 2010

Я почти уверен, что реализация linq 2 nh пока не поддерживает подобные вещи. Вам, вероятно, придется сначала выполнить sql, а затем выбрать ссылку на тип. Как это:

var types = (from t in NHibernateSession.Linq<Product>()
         select t).ToList().Select(t => t.Type).Distinct().ToList<Type>();         
return types;

Если вы не используете последнюю версию поставщика, обновите и попробуйте еще раз. Если он реализован, он должен работать нормально.

Обновление

Если единственное, что вы хотите сделать, это получить все типы продуктов. Почему бы просто не написать этот простой запрос?

var types = (from t in NHibernateSession.Linq<ProductType>()
         select t).ToList();

Нет необходимости запрашивать ваши продукты, когда вам нужны типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...