我想將一個郵件串列分組給他們的收件人。
lstMails List是一個List<MailModel>
MailModel有一個屬性,它是 string[] To.
例如,在這個串列中可能有5封郵件。
- Mail1.To = ["[email protected]"]
- Mail2.To = ["[email protected]", "[email protected]"]
- Mail3.To = ["[email protected]"]
- Mail4.To = ["[email protected]", "[email protected]"]
- Mail5.To = ["[email protected]"]
我想為每個郵件收件人獲得一個串列。
因此,例如
- "lstNicoTest" = [ Mail1, Mail2 ]
- "lstNicoJeff" = [ Mail3, Mail5 ]/li>
- "lstNicoFrank" = [ Mail2, Mail4 ]/li>
- "lstNicoStar" = [ Mail5 ]/li>
充其量只是一個ForEach(List<MailModel> list in lstMails.GroupBy(-----))
我不知道,我一直在搜索,但問題是,如果我Group By,它只檢查陣列是否相同,基本上,如果.To是["reci1", "reci"] == ["reci1", "reci"]它不 "復制 "它們,基本上
如果我沒有提供足夠的資訊,我很抱歉,我在這里進行編輯。
uj5u.com熱心網友回復:
你可以獲取所有的收件人,然后區分他們,然后為用戶過濾lstMails。
比如說:
lstMails
.SelectMany(mail => mail.To)
.Distinct()
.Select(user => lstMails.Where(mail => mail.To.Contains(user))
uj5u.com熱心網友回復:
我相信這可以得到理想的結果:
var mailsByRecipient = (from m in lstMails
from recipient in m.To
select new { m, recipient } into s
group s by s.recipient into g
select new { recipient = g.Key, mails = g.Select(x => x.m) })
.ToList()。
它回傳每個唯一的電子郵件收件人的串列,以及它所在的MailModels串列。
它通過首先創建每個收件人與它各自的MailModel的笛卡爾乘積來實作(進入s),并使用它來按收件人分組(進入g)。
最后一個選擇是純粹的美學,創建一個新的物件,它包含了recipient和mails屬性。我發現直接使用IGrouping<TKey, TElement>很古怪。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310049.html
標籤:
上一篇:在vuetify中切換組件時,如何檢查所有的復選框?
下一篇:Linq-添加多個"動態"條件
