3


0

ForeachループをLinqに変換してエラーを取得する

現在、次のforeachループがあります。

List searchResults = new List();
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オブジェクトをSearchResultオブジェクトに実際に変換するのではなく、SearchResultオブジェクトのリストを返すことです。そう:

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

これに関する助けは素晴らしいでしょう、私は髪を引き裂いてきました!

編集:ここでのコメントによると、完全なメソッドスタブです:

        public IQueryable Results
    {
        get;
        set;
    }

        public virtual IEnumerable ResultsNetwork
    {
        get
        {
            List searchResults = new List();
            foreach (Transmission trans in Results)
            {
                searchResults.Add(new SearchResult(trans));
            }
            return searchResults;
        }
    }

2 Answer


2


「Results」は「object」のコレクションであるという印象を受けます。したがって、「Select」は「x」を「object」として定義していますが、「Transmission」にしたいのです。

次のオプションのいずれかを試してください。

return Results.Cast().Select(x => new SearchResult(x)).ToList();
return Results.OfType().Select(x => new SearchResult(x)).ToList();

乾杯。


1


キャストしようとしているものを推測するのは難しいです(メソッドシグネチャと、TransmissionsをSearchResultに変換する方法を示す文言を表示する必要があります)

しかし、それを行う簡単な方法:

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