2009-10-14 130 views
0

我試圖環繞LINQ我的頭 - > nhibnhibernate.linq簡單(讀愚蠢的)問題

我有SQL的簡單一點,我試圖讓在nhibernate.linq

工作
select * from 
ColModel where ColModel.DataIndex 
not in ('CostElement1', 'CostElement2', 'CostElement3') 
and ColModel.ReportId = 1 

排除DataIndex值的列表來在一個List<string>excludeNames

這裏的形式是什麼,我都試過,但它似乎不是真的感覺愛:

var s = base._sessionManager.OpenSession(); 

var query = from col in s.Linq<ColModel>() 
      where col.Report.Id == reportid && 
      !(from c in s.Linq<ColModel>() select c.DataIndex).Contains(excludeNames) 
      select col; 

return query.ToList(); 

錯誤:

The type arguments for method 'System.Linq.Enumerable.Contains<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 

我敢肯定,我從偏移所以任何指針將十分讚賞:)

borfing該W://

+0

我不熟悉與NHibernate LINQ,而應該是包含聲明不是相反嗎?否則,你不是檢查一個dataIndex是否包含它們的列表? – Jimmeh 2009-10-14 12:02:04

回答

0

包含不接受列表。

有辦法解決這個在LINQ,但我不知道,如果有的話,這些都將在NH Linq的工作

0

我認爲你有你的排除背後。

s = base._sessionManager.OpenSession(); 

var query = from col in s.Linq<ColModel>() 
      where col.Report.Id == reportid && 
        !excludeNames.Contains(col.DataIndex) 
      select col; 

return query.ToList(); 

Collection.Contains(項目)將產生SQL item in (...collection...),加入否定會得到你想要的東西。