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