带条件将嵌套的for循环转换为linq

时间:2018-11-13 05:22:27

标签: c# .net linq

如何在嵌套循环的c#下面转换为linq ...?

 list = objBLForms.GetForms(Ids);
            for (int i = 0; i < list.Count; i++)
            {
                for (int j = 0; j < list.Count; j++)
                {
                    if (list[i].StateId == list[j].StateId && 
                    list[i].PayerId == list[j].PayerId && i != j)
                    {
                        if (string.IsNullOrEmpty(list[i].Tax))
                        {
                            list.Remove(list[i]);
                        }
                        else
                        {
                            list.Remove(list[j]);
                        }
                    }
                }
            }

我想删除具有相同州的重复付款人。如果存在任何州税,我想删除另一个重复的付款人,即;没有国家税的重复副本... 我已经通过使用嵌套的for循环实现了它,如上所示。 有什么办法可以在linq中完成。.我对linq一无所知。 linq是一个非常新的人,谢谢!

2 个答案:

答案 0 :(得分:1)

代码的逻辑实际上是删除所有具有string.IsNullOrEmpty(Tax)的内容,并且仅保留具有Tax值的第一条记录。那呢

list
    .Where(l => !string.IsNullOrEmpty(l.Tax))
    .GroupBy(l => new {l.StateId, l.PayerId})
    .Select(group => group.First())
    .ToArray();

答案 1 :(得分:0)

这对我来说似乎是正确的:

list =
    list
        .OrderByDescending(x => x.Tax)
        .GroupBy(x => new { x.StateId, x.PayerId })
        .SelectMany(x => x.Take(1))
        .ToList();