私はlinqを使い慣れています。次の表の解決策を探しています。ここ は私のテーブル構造は、私は2つの新しい列Credit
とDebit
を作成したいとTransType
条件に従ってデータを表示したい条件としてTransType
を使用することにより LINQの条件を使用して選択結果を並べ替える方法
です。
あなたはLINQの選択クエリを提案して、2 screenshotに従って結果を得ることができますか? ありがとうございます。
私はlinqを使い慣れています。次の表の解決策を探しています。ここ は私のテーブル構造は、私は2つの新しい列Credit
とDebit
を作成したいとTransType
条件に従ってデータを表示したい条件としてTransType
を使用することにより LINQの条件を使用して選択結果を並べ替える方法
です。
あなたはLINQの選択クエリを提案して、2 screenshotに従って結果を得ることができますか? ありがとうございます。
感謝を。
from o in erp.CompAccTransactions
where o.CompanyId == cid
select new
{
o.TransId,
o.TransDate,
o.TransType,
o.TransDesc,
o.PaymentRef,
Credit = o.TransType == "Credit" ? o.Amount : (o.TransType == "Debit" ? (decimal?)null : (decimal?)null),
Debit = o.TransType == "Debit" ? o.Amount : (o.TransType == "Credit" ? (decimal?)null : (decimal?)null),
o.ClearBalance
});
2つの余分な列を取得するには、独自のカスタムクラスを作成するか、匿名クラスを即座に生成することができます(dynamic
データ型を介していつでも渡すことができます)。コードは原則を示しています。この場合、私は匿名クラスを使用するので、私は元のオブジェクト内のすべてのフィールドを繰り返しプラス2つの余分な列を追加する必要があります。提案のため
static void Main(string[] args)
{
var list = new List<MyObj>
{
new MyObj { TransType = "Credit", PaymentMethod = 1, Amount = 1000 },
new MyObj { TransType = "Debit", PaymentMethod = 2, Amount = 2000 },
new MyObj { TransType = "Debit", PaymentMethod = 1, Amount = 4000 },
new MyObj { TransType = "Credit", PaymentMethod = 3, Amount = 3000 }
};
var filtered = from o in list
where o.TransType == "Credit"
select new
{
o.TransType,
o.PaymentMethod,
o.Amount,
Credit = "<VALUE>",
Debit = "<VALUE>"
};
}
class MyObj
{
public string TransType { get; set; }
public int PaymentMethod { get; set; }
public int Amount { get; set; }
}
'WHERE'方法試してみてください:' VARクレジット= transactions.Where(トン=> t.TransType == "クレジット"); ' –
アプローチにはさまざまな方法があるのであなたの質問は、広すぎます問題は、あなたが提供していない情報(良い[mcve]を含む)によって決まります。しかし、 'Select()'を使って 'Credit'と' Debit'プロパティを含む新しい要素型に投影し、 'TransType'列に従って値を設定することができます。だから私はそれを試してみることをお勧めします。 (私は、多くの会計上の文脈で、TransType列は存在しないことに注意してください...クレジット/デビットは単に値の符号によって示されます) –