C# 将通过LINQ返回的列表转换为类对象列表

C# 将通过LINQ返回的列表转换为类对象列表,c#,linq,C#,Linq,我使用LINQ to SQL获得了一个列表: var query = studentRankTable .AsEnumerable() .GroupBy(r => new { Name = r.Field<string>("ID"), Action = r.Field<string>("Name") }) .Select(grp =>

我使用LINQ to SQL获得了一个列表:

var query = studentRankTable
    .AsEnumerable()
    .GroupBy(r =>
        new
        {
            Name = r.Field<string>("ID"),
            Action = r.Field<string>("Name")
        })
    .Select(grp =>
        new
        {
            Name = grp.Key.Name,
            Action = grp.Key.Action,
            Count = grp.Count()
        });

query = query.ToList();
现在我必须将其转换为我定义的类:

[DataContract]
public class StudentRank
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Count { get; set; }

    [DataMember]
    public string Action { get; set; }
}
我无法使用foreach,因为它的数据类型为anonymous

如何将此列表转换为StudentRank对象列表?

您只需在LINQ的Select子句中使用StudentRank类:

var query = studentRankTable
    .AsEnumerable()
    .GroupBy(r =>
        new
        {
            Name = r.Field<string>("ID"),
            Action = r.Field<string>("Name")
        })
    .Select(grp =>
        new StudentRank 
        {
            Name = grp.Key.Name,
            Action = grp.Key.Action,
            Count = grp.Count()
        });
这样,此查询的返回类型将是可查询的,因此ToList将返回易于使用的列表。

您只需在LINQ的Select子句中使用StudentRank类:

var query = studentRankTable
    .AsEnumerable()
    .GroupBy(r =>
        new
        {
            Name = r.Field<string>("ID"),
            Action = r.Field<string>("Name")
        })
    .Select(grp =>
        new StudentRank 
        {
            Name = grp.Key.Name,
            Action = grp.Key.Action,
            Count = grp.Count()
        });

这样,此查询的返回类型将是可查询的,因此ToList将返回易于使用的列表。

您可以在选择中尝试此类型:

通过这种方式,您可以在序列中创建StudentRank foreach item类型的对象,而不是在序列中创建匿名类型的foreach item对象

此外,如果只想遍历查询结果的元素,则不必调用ToList

您可以通过以下方式轻松实现您想要的目标:

foreach(var item in items)

在这里,我将您的查询结果称为items,以便更具意义。

您可以在选择中尝试此选项:

通过这种方式,您可以在序列中创建StudentRank foreach item类型的对象,而不是在序列中创建匿名类型的foreach item对象

此外,如果只想遍历查询结果的元素,则不必调用ToList

您可以通过以下方式轻松实现您想要的目标:

foreach(var item in items)

在这里,我将查询结果作为项调用,以使其更有意义。

如果使用迭代器,实际上没有什么可以阻止您使用foreach

这会自动键入s,甚至对匿名类型也有效

另外,Select也可以在这里工作

query = query.Select(s => new Student { Name = s.Name, Action = s.Action, Count = s.Count });

最后,如果你进入一个实际的列表,有一个方法

如果你使用迭代器,实际上没有什么可以阻止你使用foreach

这会自动键入s,甚至对匿名类型也有效

另外,Select也可以在这里工作

query = query.Select(s => new Student { Name = s.Name, Action = s.Action, Count = s.Count });
最后,如果您拉入一个实际的列表,则有一个方法