【发布时间】:2019-06-23 22:27:29
【问题描述】:
我有两个 Dictionary<string, List<Person>> 类型的泛型,其中 Person 是:
Person {
string FirstName;
string LastName;
List<string> Aliases;
string Address;
}
其中一个泛型是“默认”,其中仅填写 FirstName 和 LastName。为简单起见,我将其称为“默认字典”...第二个字典(db 字典)填充了从 db 返回的值称呼。两个字典的键都是来自 person 对象的“FirstName”。
一些条件是:
- 默认字典在列表中具有正确的“Person”对象顺序...它们不是按字母顺序或类似的顺序
- 并非默认列表中的所有“Person”对象也会出现在 db 列表中(尽管 db 列表中的 person 对象总是在默认列表中匹配)
- 虽然肯定有更好的方法来表示这些数据...字典类型必须保持原样,因为我将它们传递给使用 foreach 循环(嵌套表)的视图,其中键是主表并且列表是键下方的子表的行
我需要做的是用从数据库返回的数据为每个键填写默认字典列表的地址和别名列表...
我已经能够正确格式化默认和 db 字典并填充正确的数据(尽管 db 字典中的列表顺序不正确)...我还能够“过滤”将默认字典转换为仅包含 db 字典(过滤字典)中也存在的键的新字典...
我遇到的问题是使用从数据库返回的每个对象的地址和别名列表填充 Person 对象...我不能只替换列表,因为我需要保留 person 对象的顺序列表...这是我尝试的最后一件事的一些代码 sn-ps(将来自 db 的响应放入名为“responseList”的所有人员对象的列表中)...
Dictionary<string, List<Person>> filteredDictionary = defaultDictionary.Where(x => firstNameList.Contains(x.Key)).ToDictionary(x => x.Key, y => y.Value);
foreach (var entry in filteredDictionary)
{
var current = entry.Value.ToList();
current.ForEach(x => responseList.Any(y => y.FirstName == x.FirstName));
current.ForEach(x => x.Address = responseList.Select(y => y.Address));
}
我知道使用 LINQ...最好只创建一个新字典而不是修改现有字典...但我不确定如何将此信息放入一个新字典中以保留 List 中的 Persons下单……
任何帮助将不胜感激......我已经被这个问题困扰了一段时间。
【问题讨论】:
-
我忘了补充一下,别名的 List
也是从数据库返回的,也需要复制过来 -
List
中的 Person's in List 的字典值顺序正确,抱歉不清楚 -
你要找
.Concat()吗? -
什么是“通用”?请注意,
Dictionary对象的成员没有顺序。您的Person类没有修饰符或public字段 - 您希望如何为其设置值? -
你说关键是
Person对象的FirstName——这是否意味着有多个Person对象具有相同的FirstName,如果是,你怎么知道哪个一场比赛?如果不是,为什么Dictionary中有List<Person>?