Linq - 将匿名类型转换为具体类型
Linq - cast anonymous type to concrete type
我正在使用以下 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);
我想 return 从方法中做到这一点,但是我认为这样做需要使用具体类型而不是匿名类型。
具体类型如下:
public class AlphanumericSuppliers
{
public string Alphanumeric { get; set; }
public IOrderedEnumerable<Supplier> Suppliers { get; set; }
}
但是,我很难获得正确的语法来将匿名类型转换为我的具体类型。
有人建议吗?
简单地创建具体类型的实例(在 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
调用
我正在使用以下 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);
我想 return 从方法中做到这一点,但是我认为这样做需要使用具体类型而不是匿名类型。
具体类型如下:
public class AlphanumericSuppliers
{
public string Alphanumeric { get; set; }
public IOrderedEnumerable<Supplier> Suppliers { get; set; }
}
但是,我很难获得正确的语法来将匿名类型转换为我的具体类型。
有人建议吗?
简单地创建具体类型的实例(在 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
调用