我有兩個可編號串列:list1 和 list2 我想從 list2 中取出一些東西并根據條件在 list1 中更新它
例如:list1.Id 已經說例如 1, 2, 3, 4, 5 等 list2.Id 有 3, 4 我需要比較這些 Id 并從與 list1 匹配的 list2 中獲取其他欄位(例如名稱、主題)。 Id(在本例中為 3 和 4)并將其復制到 list1 個其他欄位(名稱、主題)
清單 1:
| ID | 姓名 | 主題 |
|---|---|---|
| 1 | N1 | S1 |
| 2 | 氮氣 | S2 |
| 3 | ||
| 4 | ||
| 5 | N5 | S5 |
清單 2:
| ID | 姓名 | 主題 |
|---|---|---|
| 3 | N3 | S3 |
| 4 | N4 | S4 |
所需的結果:
| ID | 姓名 | 主題 |
|---|---|---|
| 1 | N1 | S1 |
| 2 | 氮氣 | S2 |
| 3 | N3 | S3 |
| 4 | N4 | S4 |
| 5 | N5 | S5 |
uj5u.com熱心網友回復:
如果你正在尋找一個沒有 Foreach 的解決方案,你有沒有想過在這部分使用 Dictionaries,你將鍵設定為物件的 id,將值設定為物件本身。
Dictionary<int, ObjectType> dictA = new Dictionary<int, ObjectType>();
在其中添加如下值:
dictA.Add(object.Id, object);
然后你將能夠在沒有 Foreach 的情況下進行合并,如下所示:
dictA = dictA.Concat(dictB.Where(b => !dictA.ContainsKey(b.Key))).ToDictionary(b => b.Key, b => b.Value);
這樣,dictB 就合并到了 dictA 中。如果您希望相反的情況發生,只需反轉值即可。
uj5u.com熱心網友回復:
假設您有一個課程主題,如下所示:
class Suabject
{
public int id;
public string name;
public string Subject;
}
你有兩個串列如下:
List<Suabject> enum1 = new List<Suabject>();
List<Suabject> enum2 = new List<Suabject>();
如果你想合并它們,你所做的基本上是遍歷 enum2 中的所有專案并檢查該專案是否存在于 enum1 然后你更新它。如果沒有,您可以將其添加到串列中。如下:
foreach (var item in enum2)
{
var s = enum1.FirstOrDefault(x=> x.id == item.id);
if(s != null)
{
s.name = item.name;
s.Subject = item.Subject;
}
else
enum1.Add(s);
}
這樣,enum1 將成為兩者的合并串列。
uj5u.com熱心網友回復:
這個怎么樣?
var listOne = new[]
{
new Entity { Id = 1, Name = "N1", Subject = "S1" },
new Entity { Id = 2, Name = "N2", Subject = "S2" },
new Entity { Id = 3 },
new Entity { Id = 4 },
new Entity { Id = 5, Name = "N5", Subject = "S5" },
};
var listTwo = new[]
{
new Entity { Id = 3, Name = "N3", Subject = "S3" },
new Entity { Id = 4, Name = "N4", Subject = "S4" },
};
// Join to lists by using 1:1 relationship
var pairs = listOne.Join(listTwo, entity => entity.Id, entity => entity.Id, (one, two) => (one, two));
foreach (var pair in pairs)
{
// Update first name, if empty
if(string.IsNullOrEmpty(pair.one.Name))
pair.one.Name = pair.two.Name;
// Update first subject, if empty
if(string.IsNullOrEmpty(pair.one.Subject))
pair.one.Subject = pair.two.Subject;
}
// Save and show elements
foreach (var item in listOne)
{
Console.WriteLine(JsonConvert.SerializeObject(item));
}
uj5u.com熱心網友回復:
不太確定你需要什么。我假設您需要根據 enum2 更新 enum1 中的資料,在這種情況下,請執行以下操作:
foreach(var item in enum2)
{
var itemToUpdate = enum1.SingleOrDefault(x => x.Id == item.Id);
if (itemToUpdate == null) continue;
itemToUpdate.Name = item.Name;
itemToUpdate.Subject = item.Subject;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370626.html
