我有一个ModuleViewModel的readOnlyCollection,我想用linq检索包含在我的集合中的特定ModuleViewModel。
这是我收藏的声明:
public ReadOnlyCollection<ModuleViewModel> colModuleViewModel { get; set; }
colModuleViewModel = new ReadOnlyCollection<ModuleViewModel>(
(from mod in currentProg.Tests.Values
select new ModuleViewModel(mod))
.ToList<ModuleViewModel>());
我的ModuleViewModel类:
public class ModuleViewModel : INotifyPropertyChanged
{
readonly ReadOnlyCollection<ModuleViewModel> _children;
readonly ModuleViewModel _parent;
readonly Module _module;
public ReadOnlyCollection<ModuleViewModel> Children
{
get { return _children; }
}
bool _isExpanded;
bool _isSelected;
public ModuleViewModel(Module module)
: this(module, null)
{
}
private ModuleViewModel(Module module, ModuleViewModel parent)
{
_module = module;
_parent = parent;
if (module is Task)
{
_children = new ReadOnlyCollection<ModuleViewModel>(
(from mod in ((Task)module).Tests.Values
select new ModuleViewModel(mod, this))
.ToList<ModuleViewModel>());
}
else
{
_children = null;
}
}
public ModuleViewModel Parent
{
get { return _parent; }
}
public string Name
{
get { return _module.Name; }
}
public string Id
{
get { return (_module is Test ? ((Test)_module).Id : ((Task)_module).Id); }
}
}
我有ModuleViewModel的ID:
string idMod = ((Module)currentProgram.finalDico[data.ToString()]).Id;
我想检索Id == idMod的ModuleViewModel
object obj =来自colModuleViewModel中的c,其中??选择c;
最佳答案
where条件很简单:c.Id == idMod
:
from c in colModuleViewModel where c.Id == idMod select c
因为只需要一个对象而不是对象的集合,所以必须使用
FirstOrDefault()
:(from c in colModuleViewModel where c.Id == idMod select c).FirstOrDefault();
查询语法在这种情况下没有好处,您最好使用方法链语法:
object obj = colModuleViewModel.FirstOrDefault(x => x.Id == idMod);