第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c#將列表分組到新列表中

c#將列表分組到新列表中

C#
猛跑小豬 2021-11-21 14:38:15
我遇到了無法將列表分組的問題,我進行了研究并嘗試了不同的方法,但結(jié)果不是我想要的。我不確定我是否做錯了什么。List<NewSomeGroup> newsomegourplist = new List<NewSomeGroup>();var query = from c in _someRepository.Table                            where  c.isRead == false                            group c by c.ReferenceId into grpdlist                            orderby grpdlist.Key                            select grpdlist;foreach (var grpdlist in query){    NewSomeGroup somegroup = new NewSomeGroup();    List<Some> somelist = new List<Some>();    somegroup.ReferenceId = grpdlist.Key;    foreach (var item in grpdlist) // not in    {        somelist.Add(item);    }    somegroup.somecontainlist = somelist;    newsomegourplist.Add(somegroup);}最后somegroup有正確ReferenceId但somecontainlist有空的對象。我很確定它在數(shù)據(jù)庫中有數(shù)據(jù),我也嘗試在 localhost 中調(diào)試,發(fā)現(xiàn)它//not in沒有添加item.數(shù)據(jù)結(jié)構(gòu)public class NewSomeGroup{    public string ReferenceId { get; set; }    public List<Some> sbnotificationlist { get; set; }}public class Some{    public string Title { get; set; }    public string projectid { get; set; }    public SimpleAccountInfo AccountInfo { get; set; }    public string Type { get; set; }     public string ReferenceId { get; set; }    public string iconPath { get; set; }    public DateTime CreateOnUtc { get; set; }}
查看完整描述

2 回答

?
狐的傳說

TA貢獻1804條經(jīng)驗 獲得超3個贊

唉,你沒有指定你的Table,所以我必須從你的代碼中提取規(guī)范:


輸入是一個Table行,其中每一行都是一個對象,至少有一個布爾屬性IsRead和一個屬性ReferenceId。


此外,似乎每一行都類似于Some. A row 不等于 a Some,因為 rows 有一個屬性IsRead而 aSome沒有這個屬性。


這可能是輸入錯誤,或者行可能是Some. 由于您沒有指定您的表,我將假設(shè)后者。


表中的行不必是相同類型的對象,但它們至少來自 Some


您希望將所有尚未讀取的行分組為具有相同ReferenceId. 您希望每個組都轉(zhuǎn)換為一個NewSomeGroup對象,其中ReferenceId是ReferenceId組中元素的公共項,SbNotificationList是一個列表,其中每個元素包含Some組中行的值。


我更熟悉方法語法(除了它有更多功能),所以我的答案將是方法語法:


var result = myRepository.Table           // from every row in the Table

    .Where(row => !row.IsRead)            // take only those that are not read

    .GroupBy(row => row.ReferenceId)      // make groups of rows with equal ReferenceId

    .Select(group => new NewSomeGroup()   // from every group make one NewSomeGroup object

    {

         ReferenceId = group.Key,

         SbNotificationList = group       // from the sequence of rows in the group

             .Cast<Some>()                // cast every row to a Some

             .ToList(),                   // and put it in a list

    })

    .OrderBy(item => item.ReferenceId);

只有當(dāng)您絕對確定表中的每一行確實是一個Some.


這是最有效的,因為您的行不會被復(fù)制;參考資料放在您的最終結(jié)果中?;蛘邠Q句話說:您的最終結(jié)果包含原始行。


但是,這會導(dǎo)致如果您更改 SbNotificationList 元素的屬性值,則原始行將更改。


如果您不想要這個,或者某些行不是Some您必須Some使用行中的值創(chuàng)建新對象:


.GroupBy(row => row.ReferenceId)

.Select(group => new NewSomeGroup() 

{

    ReferenceId = group.Key,

    SbNotificationList = group       // from the rows in the group make one list

        .Select(row => new Some()    // where every row becomes one Some object

        {

            Title = row.Title,

            ProjectId = row.ProjectId,

            ...

            CreateOnUtc = row.CreateOnUtc, 

         })

         .ToList(),

})

.OrderBy(item => item.ReferenceId);

無論您選擇哪種方法,如果您的輸入表為空或沒有未讀取的行,您的結(jié)果仍將是一個NewSomeGroup對象序列,但是該序列將為空(這與 null 不同!)。


如果您的輸入表有一行或多行被讀取,您的結(jié)果不會為空。NewSomeGroup結(jié)果中的每一個都將有一個非空的SbNotificationList,包含與對象的 ReferenceId 相等Some的所有行的值。ReferenceIdNewSomeGroup


很難說NewSomeGroup最終結(jié)果中的任何對象都不能有一個空的SbNotificationList. 你可以Debug.Assert在這個


查看完整回答
反對 回復(fù) 2021-11-21
?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超21個贊

你可以試試下面的代碼:

somegroup.somecontainlist.AddRange(somelist);

或者你可以試試這個:

somegroup.somecontainlist = new List<SomeDataType>(somelist);

或者,如果您使用的是 C# 3 和 .NET 3.5,則可以通過 Linq 執(zhí)行以下操作:

somegroup.somecontainlist = somelist.ToList();


查看完整回答
反對 回復(fù) 2021-11-21
  • 2 回答
  • 0 關(guān)注
  • 235 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號