为了账号安全,请及时绑定邮箱和手机立即绑定

Linq 过滤器以避免循环

Linq 过滤器以避免循环

C#
海绵宝宝撒 2023-07-09 10:28:45
我正在尝试制定 LINQ 查询,但不是专业人士,所以无论我尝试什么都不起作用。我想过滤列表以从下面的列表中获取电子邮件 ID,其中分数为 0,并按团队名称分组。我尝试这样做的方式是:获取不同团队名称的列表。循环遍历每个不同的团队名称并获取分数为 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 一步完成吗?
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

不确定你现在在做什么,但这就是我会做的

var result = list.Where(p => p.Score == 0)
                 .Select(p => new{p.Team, p.EmailId})
                 .GroupBy(p => p.Team)
                 .Distinct();


查看完整回答
反对 回复 2023-07-09
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

想要过滤列表以获取分数为 0 且按团队名称分组的电子邮件 ID。

过滤列表以获取分数为 0 的电子邮件 ID

var filteredList = list.Where(record => records.Score == 0);

按团队名称分组

var groupedByTeamName = filteredList.GroupBy(record => record.Team)

IEnumerable<IGrouping<TRecord, TTeam>>如果我没记错的话,这将返回一个。IGrouping<T,K>只是一个列表,其中包含Key包含您分组依据的属性(在本例中为团队)。

您当然可以以级联方式调用它们:

list.Where(record => records.Score == 0).GroupBy(record => record.Team);

但是调试会有点困难,因为您必须选择代码并快速监视句子的部分。有时这不起作用。


查看完整回答
反对 回复 2023-07-09
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

想要过滤列表以获取分数为 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);


查看完整回答
反对 回复 2023-07-09
  • 3 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信