我有查詢:使用得到的只有一個行並從表一列的NHibernate
var query = this.session.QueryOver<Products>()
.Where(uic => uic.PageNumber == nextPage[0])
.SingleOrDefault(uic => uic.ProductNumber)
但這查詢結果是一個類型的產品。結果可能只是整數類型的列ProductNumber?
我有查詢:使用得到的只有一個行並從表一列的NHibernate
var query = this.session.QueryOver<Products>()
.Where(uic => uic.PageNumber == nextPage[0])
.SingleOrDefault(uic => uic.ProductNumber)
但這查詢結果是一個類型的產品。結果可能只是整數類型的列ProductNumber?
嘗試這樣:
var query = this.session.QueryOver<Products>()
.Where(uic => uic.PageNumber == nextPage[0])
.Select(uic => uic.ProductNumber)
.SingleOrDefault<int>();
因爲你需要一個單一的原始類型值,你可以做.Select
定義的結果列,然後做.SingleOrDefault
得到的唯一結果。對於複雜的類型,你需要使用變壓器。
您可以找到有關QueryOver在nhibernate.info這篇博客文章的詳細信息:http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html
您可以使用米羅斯拉夫的答案QueryOver
,但是這看起來吸塵器LINQ:
var productNumber = session.Query<Products>()
.Where(uic => uic.PageNumber == nextPage[0])
.Select(uic => uic.ProductNumber)
.SingleOrDefault();
通知你不需要強制轉換,因爲Select
運算符會將表達式類型更改爲其參數的返回類型(它是ProductNumber
的類型)。
這個LINQ查詢也會在db端調用? – netmajor
是的,同樣的事情。 –
我認爲你想'SingleOrDefault'而不是'Single'。 –
是的,如果可能有「空結果」,應該使用'SingleOrDefault' - 0將是默認值。如果你總是期望一件商品,那麼'Single'應該是可以的。 –
我不認爲'Single'甚至可以在這裏被調用(即:這不會被編譯)。 'SingleOrDefault'是'IQueryOver'方法,而'Single'不是。 –