我有一个对象列表。这些对象中的每一个都具有Name
属性,而ObservablePairCollection
只是一个像字典一样完全正常工作的自定义字典,具有键/值对。
给定两个字符串,一个用于名称,一个用于键,我想找到首先匹配给定名称的对象,然后从该模型的字典中选择与给定键值匹配的pair
。
示例:给定名称的字符串“model1”和键的“Latitude”,应该找到名称属性等于model1
的对象,然后对象的字典中的键/值对应该是在密钥等于Latitude
的情况下返回。
目前我可以使用以下代码来完成与Name
匹配的第一部分:
private ObservableCollection<ModelBase> models;
//add objects to models
string stringToFind = "model1";
models.Single(m => m.Name == stringToFind);
因此,这会返回Name
属性等于model1
的对象。
我无法找到用于获取键/值对的正确语句。
以下是该课程的相关部分:
private ObservablePairCollection<string, string> _fields = new ObservablePairCollection<string, string>();
public ObservablePairCollection<string, string> Fields
{
get { return _fields; }
set { _fields = value; OnPropertyChanged("Fields"); }
}
private string _name;
public string Name
{
get { return _name; }
protected set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
如果可能的话,我想使用LINQ,但如果不是,那就不是很大。
答案 0 :(得分:1)
首先,为什么Single
?必须只有一个具有给定Name
的对象,并且您必须在此特定代码中强制执行吗?请记住Single
是昂贵的,因为它会枚举整个集合以确保找到的对象是唯一的。
如果您只是想找到第一个(如果有的话),那么只需使用恰当命名的First
扩展方法:
models.First(m => m.Name == stringToFind);
好的,所以返回第一个具有给定Name
的对象,如果有的话,你只需要过滤Fields
proyerty:
var pair = models.First(m => m.Name == stringToFind)
?.Fields
.First(f => f.Key = keyToFind);