0

DataGrid から取り込まれたリストがあります。

List<string> balances = new List<string>();

foreach (DataRow dr in dt.Rows)
{
    if((dr[1].ToString() != null) && (dr[1].ToString() != string.Empty))
    {
        balances.Add(dr[1].ToString());
    }
}

DataGrid は以前に日付の昇順で時系列に並べ替えられています。これらは予想される支払いであるため、リストの残高は減少するはずです。

現在のリスト項目が前のリスト項目よりも低いかどうかを確認するコードを少し書く必要がありますが、これは現在私を逃れています。誰か助けてもらえますか?

4

4 に答える 4

3
var lastBalance = decimal.MaxValue;
foreach (DataRow dr in dt.Rows)
{
    if (!string.IsNullOrEmpty(dr[1].ToString()))
    {
        var currentBalance = Convert.ToDecimal(dr[1]);
        if (currentBalance < lastBalance)
        {
            lastBalance = currentBalance;
            balances.Add(dr[1].ToString());
        }
        else
        {
            //TODO: Invalid list
            //throw ... OR
            break;
        }
    }
}
于 2013-10-22T11:12:18.820 に答える
0

ええと、遅延評価を使用し、最初の増加までしか進みません。

  var last = decimal.MaxValue;
  var decreasing = true;
  foreach(var value in dataTable.AsEnumerable()
                            .Select(r => r.Field<string>(1))
                            .Where(s => !string.IsNullOrWhiteSpace(s))
                            .Select(Decimal.Parse))
  {
      if (last < value)
      {
          decreasing = false;
          break;
      }

      last = value;
  }
于 2013-10-22T11:41:50.157 に答える
0

これを試してみると、テーブルがリストに入れられ、zip メソッドを使用して値を比較し、現在の値が以前の値よりも低いものを選択できます

List<DataRow> list = dt.AsEnumerable().ToList();
var result = list.Zip(list.Skip(1), 
(p, c) => new {current = c.fieldName, previous = p.fieldName})
.Where(f => f.current < f.previous)
.Select(a => a.current)
.ToList();
于 2013-10-22T11:12:40.603 に答える