分组选择新对象

时间:2018-03-29 20:32:17

标签: c# linq

我想从我的数据库中检索游戏列表,并计算指定团队赢得和丢失的游戏数量,并将其放入具有输赢属性的对象中。我正在尝试这个,但它似乎不正确。

var winLoss = _teamService.GetGames()
    .Where(x => x.Result != "Tie")
    .GroupBy(x => x.Result)
    .Select(x => new 
    { 
        Wins = x.Count(a => a.Result == "Hello"),
        Losses = x.Count(a => a.Result != "Hello") 
    });

这个的返回类型是IQueryable,而我希望它只是一个具有Win和Loss属性的单个对象。

在结果上执行GroupBy会将当前团队的所有胜利分配到一个组中,然后将他们丢失的每个团队分成不同的组。

4 个答案:

答案 0 :(得分:0)

使用LINQ查询,您最终会得到一个集合,但您关心的基本上是键和值的列表。我相信这将为您提供您正在寻找的信息:

var winLoss = _teamService.GetGames()
    .Where(x => x.Result != "Tie").GroupBy(x => x.Result)
    .ToDictionary(e => e.Key, e => e.Count());

int wins = 0;
int losses = 0;
winLoss.TryGetValue("WIN", out wins);
winLoss.TryGetValue("LOSS", out losses);

答案 1 :(得分:0)

你需要计算每支球队的胜负:

var winLoss = _teamService.GetGames()
    .GroupBy(x => x.Team)
    .Where(gg => gg.Key == "Hello")
    .Select(gg => new 
    { 
        Wins = gg.Count(g => g.Result == "Hello"),
        Losses = gg.Count(g => g.Result != "Hello")
    });

答案 2 :(得分:0)

我刚刚对SQL数据库进行了两次简单的计数调用。

Wins = _teamService.GetGames().Count(x => x.Result == "Name");
Loses = _teamService.GetGames().IsNotTie().Count(x => x.Result != "Name");

这不是我想要的100%但是在一次调用中执行它涉及更复杂的LINQ,因此更复杂的SQL。

答案 3 :(得分:-1)

linq 查询的末尾添加def getNumber(string): numbers = ".0123456789" result = string isNumber = False for i,char in enumerate(string): if char in numbers: result = result[i:] break for i in range(len(result)-1, 0, -1): if result[i] in numbers: result = result[:i+1] break return result ,这样您只会获得第一个元素:

FirstOrDefault()