如何使用LINQ中的条件重新排列选择结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用LINQ中的条件重新排列选择结果相关的知识,希望对你有一定的参考价值。
我是linq的新手我正在寻找下表的解决方案。这是我的桌子结构
通过使用TransType
作为条件,我想创建两个新列Credit
和Debit
,并希望根据TransType
条件显示数据。
你能否根据2截图建议我LINQ select查询获取结果。谢谢。
答案
要获得两个额外的列,您可以创建自己的自定义类或动态生成匿名类(您始终可以通过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; }
}
另一答案
谢谢你的建议。
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
});
以上是关于如何使用LINQ中的条件重新排列选择结果的主要内容,如果未能解决你的问题,请参考以下文章