我有一个对象列表,我需要根据一个字段是否具有唯一值来设置一个字段。
考虑具有两个属性的票证类
public class Ticket
{
public string TicketNumber { get; set; }
public bool IsUnique { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到票证清单,并将其传递给函数:
IList<Ticket>
Run Code Online (Sandbox Code Playgroud)
我想使用linq遍历此列表,如果给定的票证号码在该列表中是唯一的,请将bool IsUnique设置为true。
到目前为止,我有以下内容
public void UpdateTickets(IList<Ticket> Tickets)
{
foreach (var ticket in tickets)
{
// if ticketNumber occurs once
// set isUnique to true, otherwise false
}
}
Run Code Online (Sandbox Code Playgroud)
应该这样做:
foreach (var g in tickets.GroupBy(x => x.TicketNumber))
{
var unique = !g.Skip(1).Any();
foreach (var ticket in g)
{
ticket.IsUnique = unique;
}
}
Run Code Online (Sandbox Code Playgroud)
我们将具有相同编号的票归为一组,然后检查该组中是否有1件以上的票。