代码之家  ›  专栏  ›  技术社区  ›  Gerrie Schenck

如何将匿名类型的列表转换为列表?

  •  2
  • Gerrie Schenck  · 技术社区  · 14 年前

    这个简单的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 回复  |  直到 14 年前
        1
  •  7
  •   RoelF    14 年前
    result.Select(o => o.Customer).ToList();
    

    这就是你的意思吗?

        2
  •  2
  •   John Nicholas    14 年前

    为什么不只用 .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>();
    
        3
  •  1
  •   Andreas Niedermair    14 年前

    非常基本的方法,正如你解释性地问的,“什么是最简单的转换方法” 匿名键入的[…]”:

    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
    

    也许你可以给我们更多的信息,一个你想要实现的目标!

        4
  •  0
  •   Paul    14 年前

    这两种属性都需要吗?如果是这样,请遍历列表并实例化每个光标…

    有点像

     List<Customer> customers = new List<Customer>();
     foreach(item in linqQuery.ToList())
     {
    
         customers.Add(item.c);
         //do something with the Order here...
     }
    
        5
  •  0
  •   cyberzed    14 年前
    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();
    

    那将是我对解决方案的竞标(包括错投等):)