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在這個

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();
- 2 回答
- 0 關(guān)注
- 235 瀏覽
添加回答
舉報