Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何利用LINQ中的条件重新排列选择结果_C#_Linq_Entity Framework 6 - Fatal编程技术网

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

C# 如何利用LINQ中的条件重新排列选择结果,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,我是linq的新手,我正在寻找下表的解决方案。 这是我的桌子结构 通过使用TransType作为条件,我希望创建两个新列Credit和Debit,并希望根据TransType条件显示数据 就像下面的截图。 你能建议我LINQ选择查询以根据2个屏幕截图得到结果吗。 谢谢。要获得两个额外的列,您可以创建自己的自定义类或动态生成匿名类(您始终可以通过动态数据类型将其传递到任何位置)。代码显示了原理。在这种情况下,我使用匿名类,因此我必须重复原始对象中的所有字段,并添加两个额外的列: static

我是linq的新手,我正在寻找下表的解决方案。 这是我的桌子结构

通过使用
TransType
作为条件,我希望创建两个新列
Credit
Debit
,并希望根据
TransType
条件显示数据

就像下面的截图。

你能建议我LINQ选择查询以根据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; }
}
static void Main(字符串[]args)
{
变量列表=新列表
{
新的MyObj{TransType=“Credit”,PaymentMethod=1,Amount=1000},
新的MyObj{TransType=“Debit”,PaymentMethod=2,Amount=2000},
新的MyObj{TransType=“Debit”,PaymentMethod=1,Amount=4000},
新MyObj{TransType=“Credit”,PaymentMethod=3,Amount=3000}
};
var filtered=来自列表中的o
其中o.TransType==“信用”
选择新的
{
o、 TransType,
o、 支付方式,
o、 金额,
信用=”,
Debit=“”
};
}
MyObj类
{
公共字符串转换类型{get;set;}
public int PaymentMethod{get;set;}
公共整数金额{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

                                     });

尝试
Where
方法:
var credits=transactions.Where(t=>t.TransType==“Credit”)你的问题太宽泛了,因为有很多不同的方法来解决这个问题,使用哪种方法取决于你没有提供的信息(包括好的答案)。但是,您可以使用
Select()
投影到一个新的元素类型,该类型包括
Credit
Debit
属性,并根据
TransType
列设置值。所以我建议你试试。(我会注意到,在许多会计环境中,没有
TransType
列……贷记/借记仅通过值的符号表示)