2010-02-09 3 views
2

Этот простой Linq запрос:Как преобразовать анонимно введенный список в список <T>?

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>)?

EDIT: Мне нужны заказы на дополнительное состояние, я изменил свой первоначальный вопрос.

+3

Нужна ли вам заказы на все или? Если бы вы не могли просто «выбрать c» вместо «select new {c, o}» – cyberzed

+2

Почему вы присоединяетесь к Заказу, если вам нужны только клиенты? –

ответ

7
result.Select(o => o.Customer).ToList(); 

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

+1

Это вернет время каждого клиента 'X', где 'X' - количество заказов, связанных с каждым клиентом. Ваш ответ не ошибается, но, возможно, ему нужны четкие клиенты, и он лучше знает, что этот пример этого не делает. –

+0

Хорошая точка. Вопрос в том, почему существует соединение с ордерами? В любом случае вы все равно можете вызвать .Distinct(), если необходимо ... – RoelF

+0

Это не самый простой способ, хотя –

1

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

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

Я хочу как можно проще преобразовать результат моего запроса Linq в список . –

+0

для ** этого ** списка, я дал вам ответ ... если вы хотите получить более общий (ака общий) ответ, может возникнуть другое решение :) –

0

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

Что-то вроде

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

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

Вам не нужен '.ToList()'. На самом деле вам не нужны 4 линии, но это вопрос выбора. –

2

почему бы не использовать .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>(); 
0
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(); 

Это будет мой Сорта торгов на решение (включительно mispellings и т.д.) :)

Смежные вопросы