我是linq的新手我正在寻找下表的解决方案。 这是我的表格结构
使用TransType
作为条件我想创建两个新列Credit
和Debit
,并希望根据TransType
条件显示数据。
根据2截图,你能否建议我使用LINQ select查询获得结果。 谢谢。
答案 0 :(得分:0)
要获得两个额外的列,您可以动态创建自己的自定义类或生成匿名类(您始终可以通过dynamic
数据类型将其传递到任何位置)。代码显示了原理。在这种情况下,我使用匿名类,所以我必须重复原始对象中的所有字段并添加两个额外的列:
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; }
}
答案 1 :(得分:0)
感谢您的建议。
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
});