我目前有以下foreach循环:
List<SearchResult> searchResults = new List<SearchResult>();
foreach (Transmission trans in Results)
{
searchResults.Add(new SearchResult(trans));
}
return searchResults;
我想将其转换为Linq表达式,我尝试了以下内容,看起来它在linq中实现了同样的效果:
return Results.Select(x => new SearchResult(x)).ToList();
但是在执行时我收到以下错误:
System.InvalidCastException: Object must implement IConvertible.
我想我理解该错误的要点,但我遇到的问题是我实际上并没有尝试将Results集合中的Transmission Objects转换为SearchResult对象,而是返回SearchResult对象列表,SearchResult对象像这样初始化:
Transmission transmission = new Transmission(...);
SearchResult result = new SearchResult(trans);
对此的任何帮助都会很棒,我一直在撕扯我的头发!
编辑:根据评论,这里是完整的方法存根:
public IQueryable<Transmission> Results
{
get;
set;
}
public virtual IEnumerable<SearchResult> ResultsNetwork
{
get
{
List<SearchResult> searchResults = new List<SearchResult>();
foreach (Transmission trans in Results)
{
searchResults.Add(new SearchResult(trans));
}
return searchResults;
}
}
答案 0 :(得分:2)
我的印象是Results
是object
的集合,因此Select
将x
定义为object
,但您希望Transmission
成为return Results.Cast<Transmission>().Select(x => new SearchResult(x)).ToList();
return Results.OfType<Transmission>().Select(x => new SearchResult(x)).ToList();
{1}}。
尝试以下任一选项:
{{1}}
干杯。
答案 1 :(得分:1)
很难猜出你想要施放什么(你需要展示你的方法签名,以及展示你如何将传输转换为SearchResult的模糊)
然而,更简单的方法:
return Results.ConvertAll(x=> new SearchResult(x));