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

C# 将嵌套for循环转换为带条件的linq,c#,.net,linq,C#,.net,Linq,如何将下面的c#嵌套for循环转换为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].St

如何将下面的c#嵌套for循环转换为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]);
                        }
                    }
                }
            }
list=objBLForms.GetForms(id);
for(int i=0;i
我想删除同一州的重复纳税人。如果存在任何州税,我想删除另一个重复纳税人,即;没有州税的复制品。。。 我已经通过使用嵌套for循环实现了它,如上图所示。 在林肯有什么办法吗我对林肯一无所知。
我对linq非常陌生,提前感谢

您的代码逻辑实际上删除了所有包含
字符串的内容。IsNullOrEmpty(Tax)
,并且只保留第一条在
Tax
中有值的记录。那么,这个怎么样

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

这对我来说似乎是对的:

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

请注意,
&&i!=不需要j
:只需从1开始,而不是从0开始。是的,@john..这是个好主意!两个for循环都从0开始,都在
Count
结束。您必须将一个对象与其自身进行比较Yes@ahmmed。。我想删除重复项,所以我需要将其与自身进行比较…它删除每个税项为空的项目…但仅当存在其他税项重复项时删除空税项,否则将该空税项保留在列表中