我想从我的数据库中检索游戏列表,并计算指定团队赢得和丢失的游戏数量,并将其放入具有输赢属性的对象中。我正在尝试这个,但它似乎不正确。
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
会将当前团队的所有胜利分配到一个组中,然后将他们丢失的每个团队分成不同的组。
答案 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()