无法创建“YYY”类型的常量值。在此上下文中仅支持基本类型或枚举类型

时间:2013-07-04 09:05:31

标签: linq entity-framework linq-to-entities

我有一个实体Person和一个包含一组人的视图模型。

public class ViewModel
{
   public string Name { get; set; }
   public string Description { get; set; }
   public int Project { get; set; }
   public ICollection<PersonsViewModel> PersonCollection { get; set; }
}

public class PersonsViewModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

这些是我的尝试:

1E:

ICollection<Person> prsn = new PersonRepository().GetAll().Where(x => vm.PersonCollection.Select(y => y.Id).Contains(x.Id)).ToList();

2E:

ICollection<Person> prsn = (from st in new PersonRepository().GetAll()
                            from qw in cm.PersonCollection
                            where st.Id == qw.Id
                            select st).ToList();

基于this博文,3e:

ICollection<Person> prsn = (from st in new PersonRepository().GetAll()
                            from qw in cm.PersonCollection
                            where st.Id.Equals(qw.Id)
                            select st).ToList();

我要做的是,根据视图模型中的人物ID,从datacontext中选择人物实体。在所有3个(我做了更多尝试,但我失去了计数)的情况下,我最终得到了标题中描述的运行时错误。

我也在SO上发现了同样的问题,但是由于没有像模型/实体这样的额外代码,因此很难与我进行比较。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

你可以这样做,

var Ids=vm.PersonCollection.Select(y => y.Id).ToArray();

ICollection<Person> prsn =
 new PersonRepository().GetAll().Where(x => Ids.Contains(x.Id)).ToList();