2011-06-03 84 views
2

假設我有一個名爲Poll的表,我想編寫一個LINQ擴展來列出所有ID屬於陣列。對於如:方法'System.Object DynamicInvoke(System.Object [])'不支持轉換到SQL

void Main() 
{ 
    long[] ids = new long[]{ 1,2,3,4,5,6,7,8,9 }; 

    ListFail<Poll>(Poll, p => p.ID, ids); //Failed! 
    ListOK<Poll>(Poll, p => p.ID, ids); //OK! 
} 

public void ListFail<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class 
{ 
    obj.Where(p => ids.Contains(idProperty(p))).ToList().Dump(); 
} 

public void ListOK<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class 
{ 
    obj.ToList().Where(p => ids.Contains(idProperty(p))).ToList().Dump(); 
} 

我不知道爲什麼我得到ListFail

Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL. 

的錯誤,當我Where前要加上ToList()那麼它ListOK運行良好,但我當然不想要獲得整個Poll表。

有什麼想法?

回答

2

Func<T, long>更改爲Expression<Func<T, long>>。現在,因此EF不理解它。

+0

感謝您的回答^^ – ByulTaeng 2011-06-05 11:09:22

+0

我已根據您的建議對其進行了更改,但遇到了另一個錯誤''idProperty'是'變量',但像'方法'一樣使用 – ByulTaeng 2011-06-05 16:09:50

+0

對不起。我無法幫助你。查詢組成有時可能是屁股,這看起來好像不容易實現。想到的一件事就是手工創建表達式樹。但我沒有時間。 – Euphoric 2011-06-06 06:04:31

相關問題