Linq - 将匿名类型转换为具体类型

时间:2015-02-04 11:39:48

标签: c# asp.net linq

我正在使用以下linq语句:

        var suppliers = SupplierView.Select()
            .GroupBy(x => x.Name.Substring(0, 1).ToUpper(),
                (alphanumeric, suppliers) => new
                {
                    Alphanumeric = alphanumeric,
                    Suppliers = suppliers.OrderBy(x => x.Name).ToList()
                })
            .OrderBy(x => x.Alphanumeric);

我想从一个方法中返回这个,但是为了这样做,我需要使用具体类型而不是匿名类型。

这是具体类型:

public class AlphanumericSuppliers
{
    public string Alphanumeric { get; set; }
    public IOrderedEnumerable<Supplier> Suppliers { get; set; }
}

但是,我很难获得正确的语法来将匿名类型转换为我的具体类型。

有人建议吗?

1 个答案:

答案 0 :(得分:6)

只需创建具体类型的实例(不需要在LINQ中使用匿名类型):

var suppliers = SupplierView.Select()
        .GroupBy(x => x.Name.Substring(0, 1).ToUpper(),
            (alphanumeric, suppliers) => new AlphanumericSuppliers // concrete
            {
                Alphanumeric = alphanumeric,
                Suppliers = suppliers.OrderBy(x => x.Name).ToList() // *
            })
        .OrderBy(x => x.Alphanumeric);

*如评论中所述,要么将Suppliers更改为IEnumerable<Supplier>,要么从此处删除ToList来电