【问题标题】:Converting Foreach Loop to Linq and getting error将 Foreach 循环转换为 Linq 并出现错误
【发布时间】:2011-05-01 21:16:20
【问题描述】:

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

我想我理解该错误的要点,但我遇到的问题是我实际上并没有尝试将结果集合中的传输对象转换为 SearchResult 对象,而是返回一个 SearchResult 对象列表,一个 SearchResult 对象像这样初始化:

Transmission transmission = new Transmission(...);
SearchResult result = new SearchResult(trans);

对此的任何帮助都会很棒,我一直在扯头发!

编辑:根据 cmets,这里是完整的方法存根:

        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;
        }
    }

【问题讨论】:

  • 你能显示你的方法签名吗?而且您没有使用 linq 到实体或 sql 吗?堆栈跟踪的其余部分是什么?

标签: linq foreach linq-to-objects


【解决方案1】:

很难猜出您要投射什么(您需要显示您的方法签名,以及说明如何将传输转换为 SearchResult 的简介)

但是更简单的方法:

return Results.ConvertAll(x=> new SearchResult(x));

【讨论】:

    【解决方案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();
    

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2014-03-12
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多