gpt4 book ai didi

c# - 匿名方法的问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:44 25 4
gpt4 key购买 nike

我有一个方法可以排除 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();
}

我收到错误:

Argument type 'Func<ZipCode, T>' is not assignable to parameter type 'T'

该方法将像这样调用(其中 values 是一个 IEnumerable<string>x.zipcode 是一个 string ):

var zipCodes = _zipCodeRepository.match(values, x => x.zipcode)

更新

根据 John 使用 HashSet<T> 的建议我已经更改了我的代码,但是我现在遇到了不同的错误

Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to 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

最佳答案

我怀疑你想调用代表:

return (from zipCode in _table
where values.Contains(matchPhrase(zipCode))
select zipCode).Distinct();

请注意,这可能会非常昂贵。您可能想先创建一个集合:

HashSet<T> valueSet = new HashSet<T>(values);
return _table.Where(x => valueSet.Contains(matchPhrase(x))
.Distinct();

(我在这里删除了查询表达式,因为它在可读性方面弊大于利。)

关于c# - 匿名方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com