我有一个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>());
Run Code Online (Sandbox Code Playgroud)
我的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); }
}
}
Run Code Online (Sandbox Code Playgroud)
我有ModuleViewModel的Id:
string idMod = ((Module)currentProgram.finalDico[data.ToString()]).Id;
Run Code Online (Sandbox Code Playgroud)
我想检索其中Id == idMod的ModuleViewModel
object obj = from col in colModuleViewModel where ?? 选择c;
在哪里条件是微不足道的c.Id == idMod:
from c in colModuleViewModel where c.Id == idMod select c
Run Code Online (Sandbox Code Playgroud)由于您只需要一个对象而不是对象集合,因此您必须使用FirstOrDefault():
(from c in colModuleViewModel where c.Id == idMod select c).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)查询语法在这种情况下没有用处,您最好使用方法链语法:
object obj = colModuleViewModel.FirstOrDefault(x => x.Id == idMod);
Run Code Online (Sandbox Code Playgroud)