猿问

无法创建类型的常量值此上下文仅支持基元类型或枚举类型

无法创建类型的常量值此上下文仅支持基元类型或枚举类型

我在下面的查询中收到此错误

无法创建类型的常量值API.Models.PersonProtocol。在此上下文中仅支持基元类型或枚举类型

ppCombined下面是一个IEnumerable对象PersonProtocolType,由2个PersonProtocol列表的concat构成。

为什么这会失败?我们不能使用LINQ JOIN条款里面SELECTJOIN

var persons = db.Favorites
    .Where(x => x.userId == userId)
    .Join(db.Person, x => x.personId, y => y.personId, (x, y) =>
        new PersonDTO
        {
            personId = y.personId,
            addressId = y.addressId,                   
            favoriteId = x.favoriteId,
            personProtocol = (ICollection<PersonProtocol>) ppCombined                .Where(a => a.personId == x.personId)
                .Select( b => new PersonProtocol()
                 {
                     personProtocolId = b.personProtocolId,
                     activateDt = b.activateDt,
                     personId = b.personId                 })
        });


慕娘9325324
浏览 1946回答 3
3回答

繁星淼淼

这不起作用,因为它ppCombined是内存中对象的集合,您无法使用内存中的另一组数据将数据库中的一组数据连接起来。你可以尝试,而不是提取经过滤项personProtocol中的ppCombined集合中的内存后,您检索从数据库中其他属性:var&nbsp;persons&nbsp;=&nbsp;db.Favorites &nbsp;&nbsp;&nbsp;&nbsp;.Where(f&nbsp;=>&nbsp;f.userId&nbsp;==&nbsp;userId) &nbsp;&nbsp;&nbsp;&nbsp;.Join(db.Person,&nbsp;f&nbsp;=>&nbsp;f.personId,&nbsp;p&nbsp;=>&nbsp;p.personId,&nbsp;(f,&nbsp;p)&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;//&nbsp;anonymous&nbsp;object &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personId&nbsp;=&nbsp;p.personId, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addressId&nbsp;=&nbsp;p.addressId,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;favoriteId&nbsp;=&nbsp;f.favoriteId, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;.AsEnumerable()&nbsp;//&nbsp;database&nbsp;query&nbsp;ends&nbsp;here,&nbsp;the&nbsp;rest&nbsp;is&nbsp;a&nbsp;query&nbsp;in&nbsp;memory &nbsp;&nbsp;&nbsp;&nbsp;.Select(x&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;PersonDTO &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personId&nbsp;=&nbsp;x.personId, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addressId&nbsp;=&nbsp;x.addressId,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;favoriteId&nbsp;=&nbsp;x.favoriteId, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personProtocol&nbsp;=&nbsp;ppCombined&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Where(p&nbsp;=>&nbsp;p.personId&nbsp;==&nbsp;x.personId) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Select(p&nbsp;=>&nbsp;new&nbsp;PersonProtocol &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personProtocolId&nbsp;=&nbsp;p.personProtocolId, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activateDt&nbsp;=&nbsp;p.activateDt, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personId&nbsp;=&nbsp;p.personId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ToList() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});

小唯快跑啊

就我而言,我能够通过执行以下操作来解决问题:我改变了我的代码:var r2 = db.Instances.Where(x => x.Player1 == inputViewModel.InstanceList.FirstOrDefault().Player2 && x.Player2 == inputViewModel.InstanceList.FirstOrDefault().Player1).ToList();对此:var p1 = inputViewModel.InstanceList.FirstOrDefault().Player1;var p2 = inputViewModel.InstanceList.FirstOrDefault().Player2;var r1 = db.Instances.Where(x => x.Player1 == p1 && x.Player2 == p2).ToList();
随时随地看视频慕课网APP
我要回答