C# Linq-将匿名类型强制转换为具体类型
我正在使用以下linq声明:C# Linq-将匿名类型强制转换为具体类型,c#,asp.net,linq,C#,Asp.net,Linq,我正在使用以下linq声明: var suppliers = SupplierView.Select() .GroupBy(x => x.Name.Substring(0, 1).ToUpper(), (alphanumeric, suppliers) => new { Alphanumeric = alphanumeric,
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; }
}
公共类字母数字供应商
{
公共字符串字母数字{get;set;}
公共或可数供应商{get;set;}
}
但是,我很难获得将匿名类型转换为具体类型的正确语法
有人建议吗?只需创建具体类型的实例(不要求在LINQ中使用匿名类型):
*如评论中所述,要么将
供应商
更改为IEnumerable
,要么从此处删除ToList
调用,这样您就知道如何创建匿名类型,但不知道如何创建命名类型的实例,真的?我知道如何按照下面的代码执行,但它会给我语法错误。那么你应该包含错误消息。除非你更改供应商的类型,否则不会编译。@Selman22 True。或者我认为删除ToList
呼叫将有效。@Selman22-您的答案正确-如果您想让我选择答案,请发布一个答案。
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);