IEnumerable<T>
および 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
で、 は でありIEnumerable<string>
、x.zipcode
は です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()
ラムダ経由で使用するフィールドを渡したいと思います。したがってzipCode.zipcode
、2 番目の引数としてメソッドに渡されます。x => x.zipcode