代码之家  ›  专栏  ›  技术社区  ›  ilija veselica

使用LINQ求和属性

  •  1
  • ilija veselica  · 技术社区  · 15 年前
    DealsThisMonthOpen = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Open").Count(),
    DealsThisMonthLost = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Lost").Count(),
    DealsThisMonthWon = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Won").Count(),
    DealsThisMonth = DealsThisMonthOpen + DealsThisMonthLost + DealsThisMonthWon;
    

    最后一行语法不正确。是否可以这样做,否则我将不得不为此属性编写查询以计算总和?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  2
  •   abatishchev Karl Johan    15 年前

    顺便说一句, Count() predicate 参数: http://msdn.microsoft.com/en-us/library/bb535181.aspx

    var a = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Open"),
    var b = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Lost"),
    var c = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Won"),
    
    new foobar
    {
        DealsThisMonthOpen = a,
        DealsThisMonthLost = b,
        DealsThisMonthWon = c,
        DealsThisMonth = a + b + c
    };
    
        2
  •  2
  •   Justin Niessner    15 年前

    这个 Count( )方法返回 int DealsThisMonthOpen , DealsThisMonthLost ,和 DealsThisMonthWon 都是整数值。 DealsThisMonth 就是这三个整数值的和。

    var dealsThisMonth = deals
        .Count(d => d.DateCreated.Month == date.Month
            && (new string[] { "Open", "Lost", "Won" }).Contains(d.DealStatus));
    
        3
  •  0
  •   Lucas B    15 年前

    你考虑过扩展方法吗?提供求和功能。