C# Linq过滤器集合内部集合

C# Linq过滤器集合内部集合,c#,asp.net,linq,C#,Asp.net,Linq,“我收集了这些细节 Class Team { string TeamName; Int TeamId; List<matches>Match } class Matches { String MatchName; Int Season; } 班级团队 { 字符串组名; Int团队ID; 列表匹配 } 班级比赛 { 字符串匹配名; 国际季; } 我有大约16个团队,我需要选择一个特定团队的数据大于1998年。哪种方法最好?我试过使用.Any,但它跳过了,只接受季节

“我收集了这些细节

Class Team
{
string TeamName;
Int TeamId;
List<matches>Match
}

class Matches
{
    String MatchName;
    Int Season;
}
班级团队
{
字符串组名;
Int团队ID;
列表匹配
}
班级比赛
{
字符串匹配名;
国际季;
}

我有大约16个团队,我需要选择一个特定团队的数据大于1998年。哪种方法最好?我试过使用.Any,但它跳过了,只接受季节过滤器条件。有什么帮助吗?

假设您有团队对象,您可以像下面这样使用Linq

 var result =teams.Where(x=> x.Match.Any(y=>y.Season>1998) && x.TeamId==123);

我认为您错过了比较运算符
==

假设您有teams对象,您可以像下面这样使用Linq

 var result =teams.Where(x=> x.Match.Any(y=>y.Season>1998) && x.TeamId==123);

我认为您遗漏了比较运算符
==

,根据我的理解,您需要所有团队的列表,其中的匹配项与某个条件匹配,但包含基于此条件的匹配筛选器列表。使用以下数据:

var allteams = new List<Team> {
    new Team
    {
        TeamName = "FooBar SO",
        TeamId = 1,
        Matchs = new List<Match>
        {
            new Match{ MatchName="ok" , Season=100 },
            new Match{ MatchName="notOk" , Season=10 }
        }
    },
    new Team
    {
        TeamName = "Other SO",
        TeamId = 2,
        Matchs = new List<Match>
        {
            new Match{ MatchName="nope" , Season=20 },
            new Match{ MatchName="notOk" , Season=10 }
        }
    }
};
结果:

 TeamName: FooBar SO,
 TeamId: 1,
 Matchs: 
 [
    { MatchName: ok, Season: 100 },
    { MatchName: notOk, Season: 10 }
 ]  
TeamName: FooBar SO,
TeamId: 1,
Matchs: 
[
    { MatchName: ok, Season: 100 }
]
2/。至少有一个匹配条件的所有团队。
匹配列表将根据条件进行筛选

var teamsWithSeasonFilter 
    = allteams
        .Where(t => t.Matchs.Any(m => m.Season >= 100))
        .Select(
            t => 
            new Team {
                TeamName = t.TeamName,
                TeamId = t.TeamId,
                Matchs= t.Matchs
                            .Where(m=> m.Season >= 100)
                            .ToList()
            }
        );
结果:

 TeamName: FooBar SO,
 TeamId: 1,
 Matchs: 
 [
    { MatchName: ok, Season: 100 },
    { MatchName: notOk, Season: 10 }
 ]  
TeamName: FooBar SO,
TeamId: 1,
Matchs: 
[
    { MatchName: ok, Season: 100 }
]

据我所知,您需要所有团队的列表,其中的匹配项与某个条件匹配,但包含基于此条件的匹配筛选器列表。使用以下数据:

var allteams = new List<Team> {
    new Team
    {
        TeamName = "FooBar SO",
        TeamId = 1,
        Matchs = new List<Match>
        {
            new Match{ MatchName="ok" , Season=100 },
            new Match{ MatchName="notOk" , Season=10 }
        }
    },
    new Team
    {
        TeamName = "Other SO",
        TeamId = 2,
        Matchs = new List<Match>
        {
            new Match{ MatchName="nope" , Season=20 },
            new Match{ MatchName="notOk" , Season=10 }
        }
    }
};
结果:

 TeamName: FooBar SO,
 TeamId: 1,
 Matchs: 
 [
    { MatchName: ok, Season: 100 },
    { MatchName: notOk, Season: 10 }
 ]  
TeamName: FooBar SO,
TeamId: 1,
Matchs: 
[
    { MatchName: ok, Season: 100 }
]
2/。至少有一个匹配条件的所有团队。
匹配列表将根据条件进行筛选

var teamsWithSeasonFilter 
    = allteams
        .Where(t => t.Matchs.Any(m => m.Season >= 100))
        .Select(
            t => 
            new Team {
                TeamName = t.TeamName,
                TeamId = t.TeamId,
                Matchs= t.Matchs
                            .Where(m=> m.Season >= 100)
                            .ToList()
            }
        );
结果:

 TeamName: FooBar SO,
 TeamId: 1,
 Matchs: 
 [
    { MatchName: ok, Season: 100 },
    { MatchName: notOk, Season: 10 }
 ]  
TeamName: FooBar SO,
TeamId: 1,
Matchs: 
[
    { MatchName: ok, Season: 100 }
]
公共类团队
{
公共字符串TeamName{get;set;}
public int TeamId{get;set;}
公共列表匹配{get;set;}
}
公开课比赛
{
公共字符串匹配名{get;set;}
公共整数{get;set;}
}
var团队=新列表{
新团队
{
TeamName=“团队1”,
TeamId=1,
匹配项=新列表
{
新比赛{MatchName=“Match 11”,赛季=1},
新比赛{MatchName=“Match 12”,赛季=2}
}
},
新团队
{
TeamName=“团队2”,
TeamId=2,
匹配项=新列表
{
新比赛{MatchName=“Match 21”,赛季=1},
新比赛{MatchName=“Match 22”,赛季=2}
}
}
};
列出team1seazon2=teams.Where(t=>t.TeamId==1)。选择many(t=>t.Matches)。Where(m=>m.seasure==2)。ToList();
公共班级团队
{
公共字符串TeamName{get;set;}
public int TeamId{get;set;}
公共列表匹配{get;set;}
}
公开课比赛
{
公共字符串匹配名{get;set;}
公共整数{get;set;}
}
var团队=新列表{
新团队
{
TeamName=“团队1”,
TeamId=1,
匹配项=新列表
{
新比赛{MatchName=“Match 11”,赛季=1},
新比赛{MatchName=“Match 12”,赛季=2}
}
},
新团队
{
TeamName=“团队2”,
TeamId=2,
匹配项=新列表
{
新比赛{MatchName=“Match 21”,赛季=1},
新比赛{MatchName=“Match 22”,赛季=2}
}
}
};
列出team1seazon2=teams.Where(t=>t.TeamId==1)。选择many(t=>t.Matches)。Where(m=>m.seasure==2)。ToList();

要获取任何赛季超过1998年的球队的球队数据:


var result=teams.Where(x=>x.matches.Any(t=>t.seash>1998))

获取任何赛季超过1998年的球队数据:


var result=teams.Where(x=>x.matches.Any(t=>t.seash>1998))

不,这是一个错误,很抱歉,不,这是一个错误,很抱歉,那么你想选择a队和所有它的比赛,因为一个是>1998。或者您想要团队A,但只需要大于1998的匹配?您尝试了什么?如果您可以更新代码样本,使其具有适当的缩进,并进行编译,那将是非常棒的。如果您可以提供一个示例数据(代码)和您试图生成的确切结果,那就更好了。您希望选择a队及其所有匹配项,因为其中一个大于1998。或者您想要团队A,但只需要大于1998的匹配?您尝试了什么?如果您可以更新代码样本,使其具有适当的缩进,并进行编译,那将是非常棒的。如果您可以提供一个示例数据(代码)和您试图生成的确切结果,那就更好了。最终结果应该是teams集合,这里是match集合。您是对的。这个问题的质量很低,但我早就知道了。如果将最后一行更改为:
List team1seazon2=teams.Where(t=>t.TeamId==1&&t.Matches.Any(m=>m.seasure==2)).ToList()然后你会有第二季的球队名单。请注意,比赛列表还将包含该队(其他赛季)的其他比赛。最终结果应该是球队集合,这里是比赛集合。你是对的。这个问题的质量很低,但我早就知道了。如果将最后一行更改为:
List team1seazon2=teams.Where(t=>t.TeamId==1&&t.Matches.Any(m=>m.seasure==2)).ToList()然后你会有第二季的球队名单。请注意,比赛列表还将包含该队(其他赛季)的其他比赛。