Преобразование цикла по каждому элементу в Linq и получение ошибки - PullRequest
3 голосов
/ 28 октября 2010

В настоящее время у меня есть следующий цикл foreach:

List<SearchResult> searchResults = new List<SearchResult>();
foreach (Transmission trans in Results)
{
    searchResults.Add(new SearchResult(trans));
}
return searchResults;

И я хотел бы преобразовать это в выражение Linq, я пробовал следующее, которое выглядит так, как будто оно достигает того же самого вlinq to me:

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

Однако при выполнении я получаю следующую ошибку:

System.InvalidCastException: Object must implement IConvertible.

Мне кажется, я понимаю суть этой ошибки, но проблема в том, что яна самом деле не пытается преобразовать объекты Transmission в коллекции Results в объекты 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 ]

2 голосов
/ 28 октября 2010

Создается впечатление, что 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 голос
/ 28 октября 2010

Трудно угадать, что вы пытаетесь разыграть (вам нужно показать сигнатуру вашего метода, а также объявление, показывающее, как вы конвертируете Transmissions в SearchResult)

Однако и более простой способ сделать это:

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