如何在嵌套循环的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是一个非常新的人,谢谢!
答案 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();