2014-01-13 34 views
2

我有一個類似於下面的查詢,我得到一個NotSupportedException(「不支持指定的方法」)。但是,如果我在Distinct()處執行它,然後在內存中執行其餘部分,則一切正常。這個Linq查詢的哪部分對於nHibernate無效?

MySession.Query<Person>() 
    .Where(person => person.StatusId == 1) 
    .Select(person => person.Address) 
    .Distinct()      // .ToList() here fixes it. 
    .OrderBy(address => address.Addr1) 
    .ToList(); 

我做得對NHibernate的LINQ提供程序違法在這裏?如果是這樣,任何想法如何操縱這樣,我仍然可以運行在服務器端執行延遲的方式?最終,我的查詢(Distinct()以及之前的所有內容)都從我的代碼中抽象出來,該代碼執行OrderByToList

我使用:

  • 流利1.3.0.733
  • NHibernate的3.3.3.4001
  • odp.net.x64(and86).112.3.0
  • .NET 4.0完整的框架
  • VS2010
+0

什麼是列類型?例如,您不能在XML列上創建DISTINCT – Backs

+0

否XML,普通字符串,數字和日期。沒有什麼奇特的。 – Jaxidian

+0

實體地址可能有問題。沒有想法...... – Backs

回答

0

回覆@Backs指出的nHibernate限制是爲了避免請致電Distinct調用,並通過投影進行查詢。這是另一種查詢:

MySession.Query<Address> 
    .Where(addr => 
    MySession.Query<Person>() 
    .Where(person => person.StatusId == 1) 
    .Any(person => person.Address == addr)); 

(至少,我認爲這是相當於查詢,如果我沒有做我們真正的代碼調換任何錯別字。)