我有一个方法,除了一个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