在列表列表中使用 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 的值, ReceiptItemCategorydataSourceToBind 中为空或空。

我正在使用 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;
                }
            });
        });