我有一個簡單的linq-to-sql語句,它將string[]
中的值與表中的值匹配,並返回匹配的表值。重構linq-to-sql方法返回匹配值
_table
的類型是System.Data.Linq.Table<TEntity>
public IEnumerable<ZipCode> match(IEnumerable<string> values) {
HashSet<string> valueSet = new HashSet<string>(values);
return _table.Where(x => valueSet.Contains(x.zipcode);
}
的我如何重構,這樣我可以通過現場使用到Contains()
?
我的失敗嘗試:
public IEnumerable<ZipCode> match<T>(IEnumerable<T> values,
Expression<Func<ZipCode, T>> field) {
HashSet<T> valueSet = new HashSet<T>(values);
return _table.Where(x => valueSet.Contains(field(x)));
}
這會產生錯誤:
Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL.
我的想法是,我可以用表達式樹給了Contains()
的領域,但困惑於如何或是否這甚至是使用表達式的正確方法。完全可能有更好的解決方案。
這被標記爲'linq-to-sql' - 你的意思是'linq'嗎? –
我會詳細說明我的問題... _table是'System.Data.Linq.Table' – bflemi3