错误,使用IQueryable <>]在此上下文中仅支持原始类型或枚举类型。

问题描述 投票:0回答:1
在我的应用程序中,我尝试使用

EntityFramework

Repository Pattern执行Join查询,这将引发以下错误。 链接查询中的问题是什么?让我详细解释

错误描述

无法创建类型为<< [匿名类型的常量值。只要在此上下文中支持基本类型或枚举类型]

初始化

_repository = new GenericRepository<WeeklyEntry>(); _repositoryGroup = new GenericRepository<Group>(); _repositoryGroupMember = new GenericRepository<GroupMember>();

获取逻辑

var groups = _repositoryGroup.GetAll().OrderBy(o => o.ID) .Select(s => new { s.ID, s.Name }).ToList(); var groupMembers = _repositoryGroupMember.GetAll().OrderBy(o => o.ID) .Select(s => new { s.GroupID, s.ID, s.Name }) .ToList();

主要查询[无效]

var results = (from we in _repository.GetAll() join g in groups on we.GroupID equals g.ID into grpjoin from g in grpjoin.DefaultIfEmpty() join gm in groupMembers on we.DepositedByMemberID equals gm.ID into gmjoin from gm in gmjoin.DefaultIfEmpty() where gm.GroupID == g.ID select new { GroupID = g.ID, GroupName = g.Name, MemberID = grpmresult.ID, grpmresult.Name, we.ID }).ToList();

要达到以下目的
SQL查询

select w.GroupID, g.Name, gm.Name, w.ID from [dbo].[WeeklyEntry] as w left outer join [dbo].[Group] as g on g.ID = w.GroupID left outer join [dbo].[GroupMember] as gm on gm.GroupID = g.ID AND gm.ID = w.DepositedByMemberID order by w.GroupID

奇怪的发现

如果每个查询都包含.ToList();,例如from we in _repository.GetAll().ToList(),则整个查询将正常工作并给出预期的结果无任何错误

!!!

因此,如果我将每个查询返回类型转换为内存中或IEnumerable<>,它将按预期运行,没有任何错误,但是IQueryable<>查询无法按预期运行。

新代码段[正在运行]

var results = (from we in _repository.GetAll().ToList() join g in groups on we.GroupID equals g.ID into grpjoin from g in grpjoin.DefaultIfEmpty() join gm in groupMembers on we.DepositedByMemberID equals gm.ID into gmjoin from gm in gmjoin.DefaultIfEmpty() where gm.GroupID == g.ID select new {...}.ToList();

在我的应用程序中,我尝试使用EntityFramework,存储库模式执行Join查询,这将引发以下错误。链接查询有什么问题?让我详细解释错误...
entity-framework linq join entity-framework-6 repository-pattern
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.