2014-01-30 59 views
0

我有一個(Oracle)SQL查詢,我想將其轉換爲Linq以在NHibernate上下文中使用。 什麼查詢確實是讓我所有的功能已經從一個給定的模塊刪除SQL不屬於Linq

"SELECT * FROM Function WHERE ModID = " + module.PredecessorID + " 
    AND FncName NOT IN 
     (SELECT FncName FROM Function WHERE ModId = " + module.ModID + ")" 
(即他們沒有在給定 module,但都與前任 模塊存在)

這裏是一個圖像解釋數據模型

enter image description here

我在尋找與「點號」的表現,是這樣的:

DBContext.GetAll<Function>() 
    .Where(x => x.Module.ModID == module.PredecessorID)... 

回答

1

你可以分兩步(爲便於閱讀)做到這一點。

var excludedNames = DbContext.GetAll<Function>() 
          .Where(x => x.ModeID == module.ModID) 
          .Select(x => x.FncName); 

var result = DBContext.GetAll<Function>() 
         .Where(x => x.Module.ModID == module.PredecessorID && 
            !excludedNames.Contains(x.FncName)); 
+0

猜我可以,但我希望NHibernate不能只將其作爲一個SQL表達式,這將是可取的。 (至少如果覺得這樣可以節省一些計算時間吧?) – Markus

+0

@Markus:如果你沒有枚舉第一個查詢,這將被翻譯成一個sql,而不是兩個。 –

+0

不要枚舉?你的意思是像'var excludedNames'而不是'List excludedNames = .... ToList()'? – Markus