Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-LINQ查询用于此目的_C#_Asp.net Mvc_Linq_Entity Framework 5 - Fatal编程技术网

C#-LINQ查询用于此目的

C#-LINQ查询用于此目的,c#,asp.net-mvc,linq,entity-framework-5,C#,Asp.net Mvc,Linq,Entity Framework 5,我有以下带有这些字段的类 public class Account { public int Id { get; set; } public string Username { get; set; } public float Timezone { get; set; } } public class Player { public int Id { get; set; } public virtual Account Account { ge

我有以下带有这些字段的类

public class Account {
     public int Id { get; set; }
     public string Username { get; set; }
     public float Timezone { get; set; }
}

public class Player {
     public int Id { get; set; }
     public virtual Account Account { get; set; }
     public string Team_Name { get; set; }
}
现在假设我有一个名为球员的球员列表,每个队有2名球员,这意味着每个队的名字会重复两次。例如,X队有球员A和球员B,球员列表中的两个条目代表这一点

我想要实现的是根据时区将团队配对,因为每个团队有2名玩家,我应该通过访问玩家类中的Account.timezone字段来计算每个团队的平均时区,然后找到另一个具有最接近平均时区的团队,以与他们匹配

您可以使用GroupBy()按团队名称对
列表进行分组,然后从那里开始

然而,我的偏好是创建一个新的实体团队,并为该实体提供Player1和Player2属性,或
列出玩家
属性。然后我会有一个getterteamtimezone来计算团队中球员的平均时区


添加一个类来表示团队的概念,可以更清楚地表达您的程序在做什么,使其更易于理解并减少出现错误的机会。

假设您有一个
匹配的
类,如下所示:

public class Match
{
    public string Team1 { get; set; }
    public string Team2 { get; set; }
}
您可以使用LINQ执行以下操作:

var matches =
    Players.GroupBy(player => player.Team_Name) //Group players by team name
        .Select(
            team => //For each team
                new
                {
                    TeamName = team.Key, //Select team name
                    AverageTimezone = //And average time zone
                        team.Average(player => player.Account.Timezone)
                })
        .OrderBy(team => team.AverageTimezone) //Order teams by average time zone
        .Select((team, index) => new {Team = team, Index = index})
        .GroupBy(item => item.Index/2) //Group each two teams together (since the teams are ordered by average timezone, each two teams will have a close timezone)
        .Select(g => g.Select(item => item.Team).ToList())
        .Select(g => new Match
        {
            Team1 = g[0].TeamName,
            Team2 = g[1].TeamName
        })
        .ToList();

对于输出,我只需要一个排序的玩家列表,它将是列表中的索引[0]团队vs索引[1],依此类推。。。输出中不应重复输入团队名称是否有理由不使用包含玩家的
团队
类?是的,因为实际上有一个称为Tournaments的第三类,玩家类只是用来处理帐户和锦标赛之间的多对多关系,我没有包括它,因为它不需要求解,上面两个类都有更多的字段。平均值可以是
team.average(player=>player.Account.Timezone)
谢谢,但我不知道如果玩家列表中有奇数个entries@HappySylveon,但是你在问题中说,
每支球队有2名球员,这意味着每支球队的名字都会重复两次。