我有一个简单的 linq-to-sql 语句,它将 astring[]
中的值与表中的值匹配并返回匹配的表值。
_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()
但对如何或是否是使用表达式的正确方法感到困惑。可能有一个更好的解决方案。