C# 将通过LINQ返回的列表转换为类对象列表
我使用LINQ to SQL获得了一个列表: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 =>
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 });
最后,如果您拉入一个实际的列表,则有一个方法