我有一个班级
public class ReceiptDisplayInfo
{
public string ReceiptItemFor{get;set;}
public string ReceiptItemCategory{get;set;}
public string ReceiptItemReference{get;set;}
public string ReceiptRowCategory{get;set;}
public string ReceiptAmount{get;set;}
}
我有一个清单
List<List<ReceiptDisplayInfo>> dataSourceToBind ;
我的要求:对于每个List,如果 ReceiptRowCategory =&#34;付款&#34; ,我必须设置 ReceiptItemForm 的值, ReceiptItemCategory < / strong>在 dataSourceToBind 中为空或null。
我正在使用for循环,但这不是最受欢迎的方法。
请协助我使用LINQ / Lambda Expression。
答案 0 :(得分:3)
dataSourceToBind.ForEach(x =>
{
var innerList = x;
innerList.ForEach(y =>
{
if (y.ReceiptRowCategory == "Payment")
{
y.ReceiptItemFor = null;
y.ReceiptItemCategory = null;
}
});
});
答案 1 :(得分:0)
您可以使用以下代码来实现此目的 -
((from l in list
where l.ReceiptItemCategory == "payment"
select new ReceiptDisplayInfo()
{
ReceiptItemFor = null,
ReceiptItemCategory = null,
ReceiptItemReference = l.ReceiptItemReference,
ReceiptRowCategory = l.ReceiptRowCategory,
ReceiptAmount = l.ReceiptAmount
}).Union(from l in list
where l.ReceiptItemCategory != "payment"
select l)).ToList();
答案 2 :(得分:0)
我想只需2 ForEach
次调用就足够了,不需要在这里使用LINQ。但是,由于转换逻辑非常复杂,我认为你应该把它作为一种方法提取出来:
private void SomeMethod(ReceiptDisplayInfo info) { // please name this appropriately
if (info.ReceiptRowCategory == "Payment") {
info.ReceiptItemForm = null;
info.ReceiptItemCategory = null;
}
}
然后,
dataSourceToBind.ForEach(x => x.ForEach(SomeMethod));