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
表。
有什麼想法?
感謝您的回答^^ – ByulTaeng 2011-06-05 11:09:22
我已根據您的建議對其進行了更改,但遇到了另一個錯誤''idProperty'是'變量',但像'方法'一樣使用 – ByulTaeng 2011-06-05 16:09:50
對不起。我無法幫助你。查詢組成有時可能是屁股,這看起來好像不容易實現。想到的一件事就是手工創建表達式樹。但我沒有時間。 – Euphoric 2011-06-06 06:04:31