我有一个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);

09-04 22:09