使用LINQ查找具有相同值的行

时间:2017-08-06 11:37:39

标签: linq c3.js

Screen Shot from MS SQL Server Management Studio

上图中的问题是

  • 我想根据TransLog_Date
  • 向股东申请红利
  • 由于第1行的股东已将部分股份转让给第3行的持有人,因此他的新股票价值在第2行第5列显示为100000
  • 我希望根据第2行第5列的值计算红利份额,但不要在第1行第5列计算。
  • 我在LINQ中尝试了几个代码但是错了,因为这个值在所有3条记录中成倍增加,这是完全错误的。

        var transQuery = (from tq in db.TransactionsLogDbSet
                          where (tq.TransactionType == TransactionType.PurchaseOfShares)
                             || (tq.TransactionType == TransactionType.TransferOfShares) 
                             || (tq.TransactionType == TransactionType.BonusSharesDeclared)
                          select tq);
    
        var query = from row in db.TransactionsLogDbSet 
                    group row by row.Transholder_ID into g
                    select new { Count = g.Count() };
    

1 个答案:

答案 0 :(得分:1)

好吧,我想我终于得到了你想要的东西。

是吗?:按TransactionType对某些Transholder_ID的所有行进行分组,然后从每个组中选择最大Translog_Date行,为您提供最新的行数Transholder_ID。获得结果后,您可以迭代它以计算您需要的任何内容。

from t in db.TransactionLogDbSet
where where tq.TransactionType == TransactionType.PurchaseOfShares || tq.TransactionType == TransactionType.TransferOfShares || tq.TransactionType == TransactionType.BonusSharesDeclared
group t by t.Transholder_ID into g
select (from t1 in g orderby t1.Translog_Date descending select t1).First();

编辑:只要我们最终得出正确的查询,我就会继续编辑我的答案的以下部分。

到目前为止您的上一条评论显示,您只想选择TransLog_Date< =给定DateTime qualifiedDate的所有行。

from t in db.TransactionLogDbSet
where t.TransactionLog_Date <= qualifiedDate
select t
是吗?