1

私は .Net プロジェクトで NHibernate 2 を使用しており、Linq2NHibernate プロバイダーを使用しています。この単純なクエリ

var result = from d in session.Linq<Document>()
where d.CreationYear == 2010
select d.ChildEntity).ToList();

ChildEntity 型を Document 型にキャストすることはできないという例外をスローします。何故ですか?また、クエリメソッドで翻訳しようとしましたが、

session.Linq<Document>()
   .where(d=>d.CreationYear == 2010)
   .select(d=>d.ChildEntity)
   .ToList();

select メソッドは IQueryble を IQueryble に射影するはずではありませんか? TResult!=T ですか?

4

3 に答える 3

1

これを試して:

   var result = (from d in session.Linq<Document>()
   where d.CreationYear == 2010
   select new ChildEntityType
     { /* here just do a simple assignments for all ChildEntityType fields
          d.ChildEntity */ } ).ToList();

はい、これはかなりばかげているように見えるかもしれませんが、オブジェクトだけを選択しようとすると、linq2nhibernateが非常に奇妙に動作することがあります。

于 2012-03-22T12:00:06.767 に答える
0

これを試すことができますか:

session.Linq<Document>()
   .Where(d=>d.CreationYear == 2010)
   .Select(d=>d.ChildEntity)
   .ToList<T>();     //where T is typeof(ChildEntity)
于 2012-01-04T11:46:27.367 に答える
0

古い Linq プロバイダーは非常に限られており、数年間メンテナンスされていません。

最新の安定した NHibernate (3.2) にアップグレードすることをお勧めします。これには、はるかに優れた (および統合された) Linq プロバイダーがあります。

于 2012-01-04T15:03:09.620 に答える