为匿名类型属性提供别名不起作用

时间:2013-04-24 10:03:38

标签: c# asp.net anonymous-types

我有2个同名的属性:

List<CustomerWithCountry> customersList = CustomerEntity.LoadCustomersSubsetForCriteria(null, 0, 100, null)
.Select(c => new { c.CODE, c.NAME, c.COUNTRY.NAME }).ToList();

c.Name和c.Country.Name有同名的问题。

所以我尝试给c.Country.Name一个别名:

.Select(c => new { c.CODE, c.NAME, CountryName = c.COUNTRY.NAME }).ToList();

给了我以下错误:

  

错误3无法隐式转换类型'System.Collections.Generic.List&lt; AnonymousType#3&gt;'到'System.Collections.Generic.List&lt; ViewCustomersPage.CustomerWithCountry&gt;'

2 个答案:

答案 0 :(得分:4)

由于您选择的是Anonymous type,并且您尝试将ToList的结果分配给List<CustomerWithCountry>,因此该错误应该没有别名。您需要将结果投影到班级CustomerWithCountry

所以在你的查询中它应该是:

select (c=> new CustomerWithCountry() {.....

但请记住,如果您的类来自Entity框架或LINQ to SQL,那么您无法投影到该类型。

答案 1 :(得分:2)

创建新的CustomerWithCountry对象

List<CustomerWithCountry> customersList =
           CustomerEntity.LoadCustomersSubsetForCriteria(null, 0, 100, null)
              .Select(c => new CustomerWithCountry{ 
                        CODE= c.CODE, 
                        NAME= c.NAME, 
                        CountryName = c.COUNTRY.NAME })
              .ToList();