0

所以我试图从我的数据库中获取每个月的利润列表。我想循环执行此操作,我认为这将是最好的解决方案。

这里我们有一个循环,我想计算每个月的利润。

        using (var context = new ModelContext("ConnectionStringDbMagazynier"))
        {
            for (int i = 0; i < 12; i++)
            {

                decimal q = (from ar in context.Archives
                             where ar.SalesDate <= DateTime.Now.AddYears(-1).AddMonths(i + 1) && ar.SalesDate >= DateTime.Now.AddYears(-1).AddMonths(i)
                             let sum = context.Archiwum.Sum(x => x.Price)
                             select sum);

                profits[i] = decimal.ToDouble(q);

            }
        }

从这个查询我得到一个错误:

Error   2   Cannot implicitly convert type 'System.Linq.IQueryable<decimal>' to 'decimal'   

我的问题是,如何让它出现错误?这个解决方案可以吗?以防万一,我没有在特定月份出售任何东西并且总和为空?

4

2 回答 2

1

在这种情况下使用 lambda 语法更容易。

var q = context.Archives
    .Where(ar => ar.SalesDate <= DateTime.Now.AddYears(-1).AddMonths(i + 1) && ar.SalesDate >= DateTime.Now.AddYears(-1).AddMonths(i))
    .Sum(x => x.Price);

或者,如果您真的喜欢查询语法

var records = (from ar in context.Archives
    where ar.SalesDate <= DateTime.Now.AddYears(-1).AddMonths(i + 1) && ar.SalesDate >= DateTime.Now.AddYears(-1).AddMonths(i)
    select ar);

profits[i] = records.Sum(x => x.Price);
于 2013-11-01T21:52:13.397 回答
0
var q = context.Archives
.Where(p => p.SalesDate <= DateTime.Now.AddYears(-1).AddMonths(i + 1) && p.SalesDate >= DateTime.Now.AddYears(-1).AddMonths(i))
.Sum(x => x.Price.HasValue ? x.Price.Value : 0);

可以在没有循环的情况下获取月份统计信息

  var grouped = context.Archives.Where(p=> p.SalesDate <= DateTime.Now.AddYear(-1))
.GroupBy(k => new {Year = k.Year, Month = k.Month})
.Select(p=> {Date = p.Key, Sum = p.Sum(x=> x.Price.HasValue ? x.Price.Value : 0)})
于 2013-11-02T18:57:17.883 回答