Как преобразовать анонимно напечатанный список в список <T>? - PullRequest
2 голосов
/ 09 февраля 2010

Этот простой запрос Linq:

from c in mycontext.Customers
join o in mycontext.Orders on c.CustomerId equals o.CustomerId
where o.Status == 1
select new {c, o}

приведет к

List<{c:Customer, o:Order}>

после звонка ToList().

Какой самый простой способ преобразовать этот анонимно напечатанный список в список клиентов (List<Customer>)?

РЕДАКТИРОВАТЬ: мне нужны заказы для дополнительного условия, я изменил свой первоначальный вопрос.

Ответы [ 5 ]

7 голосов
/ 09 февраля 2010
result.Select(o => o.Customer).ToList();

Это то, что вы имеете в виду?

2 голосов
/ 09 февраля 2010

почему бы просто не использовать .ToList<Customers>()

и не выбирать ордера - они вам не нужны после объединения.

List<Customer> custList =  (from c in mycontext.Customers
    join o in mycontext.Orders on c.CustomerId equals o.CustomerId
    where o.Status == 1
    select c).ToList<Customer>();
1 голос
/ 09 февраля 2010

очень простой подход, как вы недвусмысленно спросили: «Какой самый простой способ конвертировать этот анонимно напечатанный [...]»:

var anonymousEnumerable = from c in mycontext.Customers
                          join o in mycontext.Orders on c.CustomerId equals o.CustomerId
                          select new
                          {
                              c,
                              o
                          };
var typedEnumerable = anonymousList.Select(item => item.c).Distinct(); // either referenceCheck or you supply an IEqualityComparer<Customer>-implementation

возможно, вы можете дать нам больше информации о том, чего именно вы хотите достичь!

0 голосов
/ 09 февраля 2010
var ledger = from c in mycontext.Customers
                 join o in mycontext.Orders on c.CustomerId equals o.CustomerId
                 where o.Status == 1
                 select new {c, o};

var customers = (from row in ledger select row.Customer).Distinct().ToList();

Это будет моя ставка на решение (включая неправильное написание и т. Д.):)

0 голосов
/ 09 февраля 2010

Вам нужны оба свойства? Если это так, прокрутите список и создайте экземпляр каждого курсора ...

Что-то вроде

 List<Customer> customers = new List<Customer>();
 foreach(item in linqQuery.ToList())
 {

     customers.Add(item.c);
     //do something with the Order here...
 }
...