我有一个方法,除了一个IEnumerable<T>
和一个 lambda 表达式,它描述了用于将 linq-to-sql 集合与数组进行比较的字段。该方法返回匹配的记录。
public IEnumerable<ZipCode> match<T>(IEnumerable<T> values,
Func<ZipCode, T> matchPhrase) {
return (from zipCode in _table
where values.Contains<T>(matchPhrase)
select zipCode).Distinct();
}
我收到错误:
参数类型
'Func<ZipCode, T>'
不可分配给参数类型'T'
该方法将像这样调用(其中values
是 anIEnumerable<string>
和x.zipcode
是 a string
):
var zipCodes = _zipCodeRepository.match(values, x => x.zipcode)
更新
根据约翰的使用建议,HashSet<T>
我已经更改了我的代码,但是我现在遇到了一个不同的错误
方法“System.Object DynamicInvoke(System.Object[])”不支持 SQL 转换。
我想我可能不清楚我的问题,我认为我使用了错误的方法签名来获得我想要的结果。让我用一个更简单的代码示例来解释:
public IEnumerable<ZipCode> match(IEnumerable<string> values) {
return (from zipCode in _table
where values.Contains(zipCode.zipcode)
select zipCode).Distinct();
}
我很想做到这一点,但使用匿名类型。我想Contains()
通过 lambda 传递要在该字段中使用的字段。所以zipCode.zipcode
将作为第二个参数传递给方法:x => x.zipcode