在列表列表中使用 LINQ 将值设置为 null
Setting the value to null using LINQ in list of list
我有一个class
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="Payment" ,我必须设置 ReceiptItemForm 的值, ReceiptItemCategory 在 dataSourceToBind 中为空或空。
我正在使用 for 循环,但这不是最受赞赏的方法。
请协助我使用 LINQ/Lambda 表达式。
你可以使用下面的代码来实现这个-
((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 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));
dataSourceToBind.ForEach(x =>
{
var innerList = x;
innerList.ForEach(y =>
{
if (y.ReceiptRowCategory == "Payment")
{
y.ReceiptItemFor = null;
y.ReceiptItemCategory = null;
}
});
});
我有一个class
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="Payment" ,我必须设置 ReceiptItemForm 的值, ReceiptItemCategory 在 dataSourceToBind 中为空或空。
我正在使用 for 循环,但这不是最受赞赏的方法。
请协助我使用 LINQ/Lambda 表达式。
你可以使用下面的代码来实现这个-
((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 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));
dataSourceToBind.ForEach(x =>
{
var innerList = x;
innerList.ForEach(y =>
{
if (y.ReceiptRowCategory == "Payment")
{
y.ReceiptItemFor = null;
y.ReceiptItemCategory = null;
}
});
});