2012-09-20 25 views

回答

4

嘗試這樣:

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

+0

我認爲你想'SingleOrDefault'而不是'Single'。 –

+0

是的,如果可能有「空結果」,應該使用'SingleOrDefault' - 0將是默認值。如果你總是期望一件商品,那麼'Single'應該是可以的。 –

+0

我不認爲'Single'甚至可以在這裏被調用(即:這不會被編譯)。 'SingleOrDefault'是'IQueryOver '方法,而'Single'不是。 –

2

您可以使用米羅斯拉夫的答案QueryOver,但是這看起來吸塵器LINQ:

var productNumber = session.Query<Products>() 
          .Where(uic => uic.PageNumber == nextPage[0]) 
          .Select(uic => uic.ProductNumber) 
          .SingleOrDefault(); 

通知你不需要強制轉換,因爲Select運算符會將表達式類型更改爲其參數的返回類型(它是ProductNumber的類型)。

+0

這個LINQ查詢也會在db端調用? – netmajor

+0

是的,同樣的事情。 –

相關問題