如何使用LINQ中的条件重新排列选择结果

时间:2017-12-12 06:08:40

标签: c# linq entity-framework-6

我是linq的新手我正在寻找下表的解决方案。 这是我的表格结构 enter image description here

使用TransType作为条件我想创建两个新列CreditDebit,并希望根据TransType条件显示数据。

像下面的截图一样。 enter image description here

根据2截图,你能否建议我使用LINQ select查询获得结果。 谢谢。

2 个答案:

答案 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

                                     });