无法创buildtypes的常量值在此上下文中仅支持基本types或枚举types
我得到下面的查询这个错误
无法创buildtypes
API.Models.PersonProtocol
的常量值。 在此上下文中仅支持基本types或枚举types
下面的ppCombined
是PersonProtocolType
一个IEnumerable
对象,它由2个PersonProtocol
列表的连接构成。
为什么这个失败? 我们不能在JOIN
的SELECT
里面使用LINQ JOIN
子句吗?
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 }) });
这是行不通的,因为ppCombined
是内存中对象的集合,而且不能与内存中的另一组数据一起join数据库中的一组数据。 您可以试着在从数据库中检索到其他属性后,在内存中提取ppCombined
集合的过滤项目personProtocol
:
var persons = db.Favorites .Where(f => f.userId == userId) .Join(db.Person, f => f.personId, p => p.personId, (f, p) => new // anonymous object { personId = p.personId, addressId = p.addressId, favoriteId = f.favoriteId, }) .AsEnumerable() // database query ends here, the rest is a query in memory .Select(x => new PersonDTO { personId = x.personId, addressId = x.addressId, favoriteId = x.favoriteId, personProtocol = ppCombined .Where(p => p.personId == x.personId) .Select(p => new PersonProtocol { personProtocolId = p.personProtocolId, activateDt = p.activateDt, personId = p.personId }) .ToList() });
不知道有没有人search这个。 我有同样的问题。 select查询,然后在哪里(或join)和使用selectvariables解决了我的问题。 (问题是在我收集“重新整合”)
query.Select(zv => new { zv, rId = zv.this.Reintegraties.FirstOrDefault().Id }) .Where(x => !db.Taken.Any(t => t.HoortBijEntiteitId == x.rId && t.HoortBijEntiteitType == EntiteitType.Reintegratie && t.Type == TaakType)) .Select(x => x.zv);
希望这有助于任何人。