Linq 过滤器以避免循环

我正在尝试制定 LINQ 查询,但不是专业人士,所以无论我尝试什么都不起作用。我想过滤列表以从下面的列表中获取电子邮件 ID,其中分数为 0,并按团队名称分组。

我尝试这样做的方式是:

  1. 获取不同团队名称的列表。

  2. 循环遍历每个不同的团队名称并获取分数为 0 的电子邮件 ID。

Team    Name   Score    EmailId  
Hawk    Amy     0       Amy@gmail.com  
Hawk    Aby     0       Aby@gmail.com  
Hawk    Raf     1       Raf@gmail.com  
Hawk    Jay     2       Jay@gmail.com  
Eagle   Blu     0       Blu@gmail.com  
Eagle   Tru     1       Tru@gmail.com

我想得到两行:Hawkand Amy@gmail.com, Aby@gmail.com,下一个结果是Eaglewith Blue@gmail.com。 这可以通过 LINQ 一步完成吗?


海绵宝宝撒
浏览 133回答 3
3回答

墨色风雨

不确定你现在在做什么,但这就是我会做的var result = list.Where(p => p.Score == 0)                  .Select(p => new{p.Team, p.EmailId})                  .GroupBy(p => p.Team)                  .Distinct();

慕姐4208626

想要过滤列表以获取分数为 0 且按团队名称分组的电子邮件 ID。过滤列表以获取分数为 0 的电子邮件 IDvar&nbsp;filteredList&nbsp;=&nbsp;list.Where(record&nbsp;=>&nbsp;records.Score&nbsp;==&nbsp;0);按团队名称分组var&nbsp;groupedByTeamName&nbsp;=&nbsp;filteredList.GroupBy(record&nbsp;=>&nbsp;record.Team)IEnumerable<IGrouping<TRecord, TTeam>>如果我没记错的话,这将返回一个。IGrouping<T,K>只是一个列表,其中包含Key包含您分组依据的属性(在本例中为团队)。您当然可以以级联方式调用它们:list.Where(record&nbsp;=>&nbsp;records.Score&nbsp;==&nbsp;0).GroupBy(record&nbsp;=>&nbsp;record.Team);但是调试会有点困难,因为您必须选择代码并快速监视句子的部分。有时这不起作用。

翻翻过去那场雪

想要过滤列表以获取分数为 0 且按团队名称分组的电子邮件 ID。这是一个很难说的方式吗:我想要未得分团队成员的所有电子邮件吗?将您的数据分组为“球队及其球员和得分”;仅保留那些得分为零的球队并提取球员的电子邮件。为此,我们使用带有 aKeySelector 和 aResultSelector 的 GroupBy 重载var emailsOfPlayersInTeamsWithZeroScor = myInput.GroupBy    // keySelector: the team    .GroupBy(inputItem => inputItem.Team,    // ResultSelector: from every Team with its players and scores    // make sequences of emails of players and check if there is a score at all    (team, players) => new    {        // not interested in the team        // remember if all scores are zero        HasOnlyZeroScore = players.All(player.Score == 0),        // remember all emails of the players in the team        PlayerEmails = players.Select(player => player.Email),    })    // keep only the items with a zero score    .Where(team => team.HasOnlyZeroScore)    // and select the lists of emails per team as one big list:    .SelectMany(team => team.PlayerEmails);
打开App,查看更多内容
随时随地看视频慕课网APP