Преобразование запроса Linq в обычный тип - PullRequest
0 голосов
/ 15 ноября 2010

У меня возникли проблемы при использовании linq и лямбда-выражений. У меня есть объект типа Trip.

`

List<Trip> trip = newTrips.Select(x=>x).ToList();
 IEnumerable<Trip> data = trip.GroupBy(y=> new {
                            y.StartingNode,
                            y.EndingNode,
                            y.PathNumber}).Cast<Trip>();

List <Trip> listAgain = data.ToList();  // This is where i get the error 

не может неявно преобразовать system.collection.generics.list в DataObjects.Trip

` Мне нужно преобразовать результат, полученный из linq, в объект списка. Или есть другой лучший способ добиться этого.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

trip.GroupBy(...) не возвращает IEnumerable<Trip>.Он возвращает IEnumerable<IGrouping<'a, Trip>>, где 'a - анонимный тип, созданный для объектов new {...}.

Эти IGrouping<'a, Trip> объекты являются коллекциями и не могут быть непосредственно преобразованы в Trip.

Если вам нужен только один объект на группу, выполните:

IEnumerable<Trip> data = trip
    .GroupBy(y => new {
        y.StartingNode,
        y.EndingNode,
        y.PathNumber
    })
    .Select(g => g.First());
List<Trip> listAgain = data.ToList();

В качестве альтернативы, если вы хотите, чтобы все объекты отключения, но были сгруппированы по их начальному / конечному узлам и номеру пути, выполните:

IEnumerable<Trip> data = trip
    .GroupBy(y => new {
        y.StartingNode,
        y.EndingNode,
        y.PathNumber
    })
    .SelectMany(g => g);
List<Trip> listAgain = data.ToList();

Объекты IGrouping шаблонизируются исходным типом и возвращают Trip объекты для обоих .First () и .SelectMany () .

0 голосов
/ 15 ноября 2010

Вы не можете преобразовать результат GroupBy в Trip - он не возвращает Trip. Смотри http://msdn.microsoft.com/en-us/library/bb534501.aspx

Обратите внимание, что причина ошибки в третьем назначении заключается в том, что GroupBy и Cast откладываются.

...