0

次のクエリを実行しようとしていますが、何らかの理由MemberTransactionCountNonMemberTransactionCountまったく同じ値として返されます。.Where()条項が期待どおりに機能していないようです。

誰かが私が間違っているかもしれない場所を指摘できることを願っています。

from trans in transactions
orderby trans.TransactionDate.Year , trans.TransactionDate.Month
group trans by new {trans.TransactionDate.Year, trans.TransactionDate.Month}
into grp
select new MemberTransactions
{
    Month = string.Format("{0}/{1}", grp.Key.Month, grp.Key.Year),
    MemberTransactionCount =
        grp.Where(x => x.Account.Id != Guid.Empty || x.CardNumber != null)
           .Sum(x => x.AmountSpent),
    NonMemberTransactionCount =
        grp.Where(x => x.Account.Id == Guid.Empty && x.CardNumber == null)
           .Sum(x => x.AmountSpent)
}

EDIT データベースで、結果が本来あるべきものではないことを確認しました。私たちが見ている基準を考慮せずに、すべてを足し合わせているようです。Account

4

2 に答える 2

1

私はこれを2つの別々のクエリで解決しました。それは私が望んでいた通りではありませんが、それは仕事をし、私が望んでいたのと同じくらい速いようです.

var memberTrans = from trans in transactions
              where trans.Account != null
                    || trans.CardNumber != null
              orderby trans.TransactionDate.Month
              group trans by trans.TransactionDate.Month
              into grp
              select new
                  {
                      Month = grp.Key,
                      Amount = grp.Sum(x => x.AmountSpent)
                  };
var nonMemberTrans = (from trans in transactions
                  where trans.Account == null
                        && trans.CardNumber == null
                  group trans by trans.TransactionDate.Month
                  into grp
                  select new
                      {
                          Month = grp.Key,
                          Amount = grp.Sum(x => x.AmountSpent)
                      }).ToList();

var memberTransactions = new List<MemberTransactions>();
foreach (var trans in memberTrans)
{
var non = (from nt in nonMemberTrans
           where nt.Month == trans.Month
           select nt).FirstOrDefault();

var date = new DateTime(2012, trans.Month, 1);
memberTransactions.Add(new MemberTransactions
    {
        Month = date.ToString("MMM"),
        MemberTransactionCount = trans.Amount,
        NonMemberTransactionCount = non != null ? non.Amount : 0.00m
    });
}
于 2013-01-09T19:01:00.287 に答える
0

ここでの主な問題は、結果が正しいかもしれないのに、結果を疑うことだと思います。

検証用に別のプロパティを追加します。

TotalAmount = grp.Sum(x => x.AmountSpent)
于 2013-01-09T17:14:29.270 に答える