use*_*186 152 c# linq entity-framework join
我在下面的查询中收到此错误
无法创建类型的常量值
API.Models.PersonProtocol
.在此上下文中仅支持基元类型或枚举类型
ppCombined
下面是一个IEnumerable
对象PersonProtocolType
,由2个PersonProtocol
列表的concat构成.
为什么这会失败?我们不能使用LINQ JOIN
条款里面SELECT
的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
})
});
Run Code Online (Sandbox Code Playgroud)
Sla*_*uma 218
这不起作用,因为它ppCombined
是内存中对象的集合,您无法使用内存中的另一组数据将数据库中的一组数据连接起来.你可以尝试,而不是提取经过滤项personProtocol
中的ppCombined
集合中的内存后,您检索从数据库中其他属性:
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()
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
180222 次 |
最近记录: |