c# - 使用 linq 在列上运行计数

标签 c# linq

我有一个看起来像这样的游戏 table : 日期、团队 1、团队 2、在家

样本条目可能是

2010 年 10 月 10 日,A 队、B 队、B 队 - 意味着 B 队在这场比赛中主场作战。有很多球队互相比赛。

我想使用 linq 来获取以下信息:

列出球队在主场的所有比赛,以及最近 3 到 5 场主场比赛。

关于如何实现这一点有什么建议吗?

最佳答案

我制作了一个小示例应用程序。我不是 100% 确定这是否符合您要查找的内容,所以如果我错过了您的问题要点,请发表评论。

编辑 我对其进行了修改以将日期考虑在内。

var games = new[]
{
    new Game() {Date = new DateTime(2010, 12, 1), TeamA = "A", TeamB="B", AtHome = "B"},
    new Game() {Date = new DateTime(2010, 11, 1), TeamA = "A", TeamB="B", AtHome = "A"},
    new Game() {Date = new DateTime(2010, 10, 1), TeamA = "A", TeamB="B", AtHome = "B"},
    new Game() {Date = new DateTime(2010, 9, 1), TeamA = "A", TeamB="B", AtHome = "A"},
    new Game() {Date = new DateTime(2010, 8, 1), TeamA = "A", TeamB="B", AtHome = "B"},
    new Game() {Date = new DateTime(2010, 7, 1), TeamA = "A", TeamB="C", AtHome = "A"},
    new Game() {Date = new DateTime(2010, 6, 1), TeamA = "B", TeamB="C", AtHome = "C"},
    new Game() {Date = new DateTime(2010, 5, 1), TeamA = "B", TeamB="C", AtHome = "C"},
    new Game() {Date = new DateTime(2010, 4, 1), TeamA = "D", TeamB="C", AtHome = "C"},
    new Game() {Date = new DateTime(2010, 3, 1), TeamA = "D", TeamB="B", AtHome = "D"},
    new Game() {Date = new DateTime(2010, 2, 1), TeamA = "D", TeamB="B", AtHome = "B"},
    new Game() {Date = new DateTime(2010, 1, 1), TeamA = "A", TeamB="D", AtHome = "D"},
    new Game() {Date = new DateTime(2009, 12, 1), TeamA = "A", TeamB="D", AtHome = "A"},
    new Game() {Date = new DateTime(2009, 11, 1), TeamA = "A", TeamB="B", AtHome = "A"},
    new Game() {Date = new DateTime(2009, 10, 1), TeamA = "A", TeamB="B", AtHome = "B"}
};

var result = from g in games
             orderby g.Date descending
             where games.Where(w => (w.TeamA == g.AtHome || w.TeamB == g.AtHome) 
                                    && w.Date <= g.Date)
                        .Take(5)
                        .Count(c => c.AtHome == g.AtHome) >= 3
             select g;


class Game
{
    public DateTime Date { get; set; }
    public string TeamA { get; set; }
    public string TeamB { get; set; }
    public string AtHome { get; set; }
}

返回:

12/1/2010 A B B
11/1/2010 A B A
9/1/2010 A B A
7/1/2010 A C A
6/1/2010 B C C

关于c# - 使用 linq 在列上运行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251792/

相关文章:

c# - 验证一个方法被调用

c# - 将 'The member' 转换为 SQL,这样它就不会抛出 'has no supported translation to SQL'

c# - 读取文件,检查列的正确性,写入文件 C#

c# - Linq中的高级过滤

c# - 如何通过场景名称获取场景中的游戏对象列表,但只能获取一次?

c# - LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,并且无法将此方法翻译成存储表达式

c# - 在 LINQ 中获取选项集标签

c# - LINQ to Entities 跳过并采取

c# - Linq System.OutofMemoryException 异常

c# - Linq 比较 C# 中的两个集合