从分组元素中选择多个
本文关键字:选择 元素 | 更新日期: 2023-09-27 17:56:23
在下面的代码中,我想Invoices
他们的总InvoiceLine
总数以及与每个Invoice
相关的Tracks
列表。
var screenset =
from invs in context.Invoices
join lines in context.InvoiceLines on invs.InvoiceId equals lines.InvoiceId
join tracks in context.Tracks on lines.TrackId equals tracks.TrackId
group new { invs, lines, tracks }
by new
{
invs.InvoiceId,
invs.InvoiceDate,
invs.CustomerId,
invs.Customer.LastName,
invs.Customer.FirstName
} into grp
select new
{
InvoiceId = grp.Key.InvoiceId,
InvoiceDate = grp.Key.InvoiceDate,
CustomerId = grp.Key.CustomerId,
CustomerLastName = grp.Key.LastName,
CustomerFirstName = grp.Key.FirstName,
CustomerFullName = grp.Key.LastName + ", " + grp.Key.FirstName,
TotalQty = grp.Sum(l => l.lines.Quantity),
TotalPrice = grp.Sum(l => l.lines.UnitPrice),
Tracks = grp.SelectMany(t => t.tracks)
};
但是,在最后一行中,我做了一个 SelectMany 给了我一个错误:
Tracks = grp.SelectMany(t => t.tracks)
错误:
无法从用法中推断出类型参数。尝试显式指定类型参数。
知道为什么吗?
提前谢谢。
对象tracks
是单个轨道,而不是列表。如果需要使用 SelectMany,请使用 需要选择一个列表 以便:
将序列的每个元素投影到 IEnumerable 并展平 将生成的序列合并为一个序列。
因此,将其更改为:
Tracks = grp.Select(t => t.tracks)
SelectMany的真正用途是当您有一个列表列表并且想要将列表转换为单个列表时。例:
List<List<int>> listOfLists = new List<List<int>>()
{
new List<int>() { 0, 1, 2, 3, 4 },
new List<int>() { 5, 6, 7, 8, 9 },
new List<int>() { 10, 11, 12, 13, 14 }
};
List<int> selectManyResult = listOfLists.SelectMany(l => l).ToList();
foreach (var r in selectManyResult)
Console.WriteLine(r);
输出:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14