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)));
}
これにより、次のエラーが発生します。
メソッド 'System.Object DynamicInvoke(System.Object[])' には、サポートされている SQL への変換がありません。
私の考えでは、式ツリーを使用してフィールドを与えることができましたContains()
が、これが式を使用する正しい方法であるかどうかについて混乱していました。おそらく全体としてより良い解決策があります。