将Foreach循环转换为Linq并获取错误

时间:2010-10-28 13:03:24

标签: linq foreach linq-to-objects

我目前有以下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;
        }
    }

2 个答案:

答案 0 :(得分:2)

我的印象是Resultsobject的集合,因此Selectx定义为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));