[英]Append property value to c# model value using LINQ
我想返回帶有 ID 和名稱的記錄列表,如果名稱不唯一,則名稱將附加域作為名稱(域),如果域也是非唯一的,它將再次 append 代碼,例如作為名稱(域)(代碼)。
明確名稱 - 用於唯一名稱,名稱(域) - 用於重復名稱 名稱(域)(代碼) - 用於重復代碼。
以下是樣本數據和預期數據
**Sample Data**
var filter = new List<Record>()
{
new Record { Id = 011, Name = "OAKLAWN", Code = 123, Domain = "p1000"},
new Record { Id = 012, Name = "OAKLAWN", Code = 124 , Domain = "p2000"},
new Record { Id = 013, Name = "OAKLAWN", Code = 125 , Domain = "p3000"},
new Record { Id = 014, Name = "OAKLAWN", Code = 126 , Domain = "p4000"},
new Record { Id = 015, Name = "OAKLAWN", Code = 127 , Domain = "p5000"},
new Record { Id = 016, Name = "PEAKLAWN", Code = 111 , Domain = "p6000"},
new Record { Id = 017, Name = "PERKLAWN", Code = 124 , Domain = "p6000"},
new Record { Id = 018, Name = "QUCKLAWN", Code = 122 , Domain = "p6000"}
};
**expected return data**
{ Id = 011, Name = "OAKLAWN(p1000)"},
{ Id = 012, Name = "OAKLAWN(p2000)(124)"},
{ Id = 013, Name = "OAKLAWN(p3000)"},
{ Id = 014, Name = "OAKLAWN(p2000)(126)"},
{ Id = 015, Name = "OAKLAWN(p5000)"},
{ Id = 016, Name = "PEAKLAWN"},
{ Id = 017, Name = "PERKLAWN"},
{ Id = 018, Name = "QUCKLAWN"}
如何使用 c# LINQ 來實現這一點。
.NET 小提琴: https://dotnetfiddle.net/2UdaxY
謝謝。
var records = filter.GroupBy(
r => r.Name,
(key, group) => group.Select(r => new
{
r.Id,
Name = group.Count() == 1
? key
: group.Count(x => x.Domain == r.Domain) == 1
? $"{key}({r.Domain})"
: $"{key}({r.Domain})({r.Code})"
})
)
.SelectMany(r => r)
.ToArray();
.NET 小提琴: https://dotnetfiddle.net/tIPZOR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.