如何将匿名类型列表转换为List <t>?</t>

时间:2010-02-09 12:56:13

标签: c# .net linq generics anonymous-types

这个简单的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 个答案:

答案 0 :(得分:7)

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

这是你的意思吗?

答案 1 :(得分: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>();

答案 2 :(得分:1)

非常基本的方法,因为你明确地问道“转换这个匿名输入的最简单方法是什么”:

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

也许您可以向我们提供一些您想要实现的更多信息!

答案 3 :(得分:0)

你需要这两个属性吗?如果是这样,请逐步浏览列表并实例化每个curstomer ......

这样的东西
 List<Customer> customers = new List<Customer>();
 foreach(item in linqQuery.ToList())
 {

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

答案 4 :(得分: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();

这将是我对解决方案的投标(包括误解等):)