使用列表

时间:2017-04-28 06:31:04

标签: c# linq lambda linq-to-objects

我有一个班级

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。

3 个答案:

答案 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));