【发布时间】:2017-05-05 12:43:11
【问题描述】:
我有一个对象列表。这些对象中的每一个都有一个Name 属性和一个ObservablePairCollection,它只是一个自定义字典,工作方式与字典完全一样,有一个键/值对。
给定两个字符串,一个用于名称,一个用于键,我想找到第一个与给定名称匹配的对象,然后从该模型的字典中选择与给定键值匹配的 pair。
示例:给定字符串“model1”作为名称,“纬度”作为键,应该找到一个 name 属性等于 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,但如果不是,也没什么大不了的。
【问题讨论】:
-
如果我理解正确,你需要这样的东西:
models.Single(m => m.Name == "someName").Fields.Single(f => f.Key == "Latitude"); -
@Nino 为什么在字典中搜索关键字时使用
Single? -
@InBetween,你是对的,
First()是更好的方法。 -
谢谢@Nino,InBetween 是一种更便宜的方法,但你的方法确实适用于此目的。
标签: c# linq dictionary