我有以下类的对象列表,
class Invoice
{
public int InvoiceNumber;
public string CustomerName;
public bool IsDupe;
}
发票号码可以是重复的,甚至可以是4张发票的案例,所有发票都有相同的号码。
我需要在除发票对象之外的所有对象上设置IsDupe标志。 一种方法是使用发票号码列表并将每个号码与标志进行比较的强力方法。 我也试过这个question。 有没有更好的语法方法呢? TIA
答案 0 :(得分:5)
这很有效。
var invs = new List<Invoice> { new Invoice { InvoiceNumber = 1 },
new Invoice { InvoiceNumber = 1 },
new Invoice { InvoiceNumber = 1 },
new Invoice { InvoiceNumber = 2 },
new Invoice { InvoiceNumber = 3 },
new Invoice { InvoiceNumber = 3 }
};
invs.ForEach(i => i.IsDupe = true);
invs.GroupBy (i => i.InvoiceNumber)
.Select(g => g.First())
.ToList()
.ForEach(i => i.IsDupe = false);
可生产
1 null False
1 null True
1 null True
2 null False
3 null False
3 null True
或者,您可以调用属性IsNotDupe
并利用布尔值默认为false的事实(您可以删除第一个ForEach
)
答案 1 :(得分:4)
假设您有这些元素的列表,您可以使用LINQ并使用$("#ifram_id").attr("src",document.referrer);
扩展名:
ForEach
它按List<Invoice> invoices = /* */;
invoices
.GroupBy(inv => inv.InvoiceNumber)
.ForEach(group => group.Skip(1).ForEach(notFirst => notFirst.IsDupe = true));
向上对发票进行分组,如果一个论坛包含多个项目,则会将InvoiceNumber
设置为IsDupe
除了第一个以外的所有内容。
然而,使用true
似乎不是LINQ友好的,对我来说不太可读
使用ForEach
:
foreach
现在,它绝对可读 - 取每个组,除了第一个项目之外的所有项目,并标记为foreach (var group in invoices.GroupBy(inv => inv.InvoiceNumber))
{
foreach (var notFirstItem in group.Skip(1))
{
notFirstItem.IsDupe = true;
}
}
。