C# EF6无法将Generic.List转换为Linq.IQueryable
我正在编写一个条件查询,以返回来自三个不同表的特定数据。这些表没有直接关系,所以我不得不使用联接。我还需要对数据进行分组。这就是我想到的:C# EF6无法将Generic.List转换为Linq.IQueryable,c#,linq,generics,entity-framework-6,C#,Linq,Generics,Entity Framework 6,我正在编写一个条件查询,以返回来自三个不同表的特定数据。这些表没有直接关系,所以我不得不使用联接。我还需要对数据进行分组。这就是我想到的: public static List<SimpleConfCommSchedule> GetSimpleConfCommSchedules(DateTime confCommSchedDate, short sessionId, string body = null) { using (var co
public static List<SimpleConfCommSchedule> GetSimpleConfCommSchedules(DateTime confCommSchedDate,
short sessionId, string body = null)
{
using (var context = new ConferenceContext())
{
var confCommSched = context.ConferenceMemberSchedules
.Join(context.ConferenceMembers,
s => s.AuditId,
m => m.AuditId,
(s, m) => new {s, m})
.Join(context.Rooms,
sm => sm.s.RoomNumber.Value,
r => r.RoomId,
(sm, r) => new { sm, r });
confCommSched = confCommSched.Where(smr => smr.sm.s.SessionId == sessionId && smr.sm.s.Deleted == false);
if (!string.IsNullOrWhiteSpace(body))
confCommSched = confCommSched.Where(smr => smr.r.Body == body);
confCommSched = confCommSched.GroupBy(smr => new { smr.sm.s.BillNumber, smr.sm.s.MeetingDateTime, smr.sm.s.AuditId, smr.r.Location })
.Select(smr => new
{
billNumber = smr.Key.BillNumber,
room = smr.Key.Location,
datetime = smr.Key.MeetingDateTime,
members = smr.Select(t => new
{
displayOrder = t.sm.m.DisplayOrder,
memberId = t.sm.m.MemberId
}).ToList()
}).ToList()
.Select(obj => new SimpleConfCommSchedule
{
BillNumber = obj.billNumber,
Location = obj.room,
MeetingStart = obj.datetime,
MemberIds = obj.members.Select(m => new SimpleMemberId
{
MemberId = m.memberId,
DisplayOrder = m.displayOrder
}).ToList()
}).ToList();
return confCommSched;
}
}
公共静态列表GetSimpleConfCommSchedules(日期时间confCommSchedDate,
短会话ID,字符串体=null)
{
使用(var context=newConferenceContext())
{
var confCommSched=context.ConferenceMemberSchedules
.Join(context.ConferenceMembers,
s=>s,
m=>m,
(s,m)=>新的{s,m})
.连接(上下文、房间、,
sm=>sm.s.RoomNumber.Value,
r=>r.RoomId,
(sm,r)=>新的{sm,r});
confCommSched=confCommSched.Where(smr=>smr.sm.s.SessionId==SessionId&&smr.sm.s.Deleted==false);
如果(!string.IsNullOrWhiteSpace(body))
confCommSched=confCommSched.Where(smr=>smr.r.Body==Body);
confCommSched=confCommSched.GroupBy(smr=>new{smr.sm.s.BillNumber,smr.sm.s.MeetingDateTime,smr.sm.s.audited,smr.r.Location})
.选择(smr=>new
{
billNumber=smr.Key.billNumber,
房间=smr.钥匙位置,
datetime=smr.Key.MeetingDateTime,
members=smr.Select(t=>new
{
displayOrder=t.sm.m.displayOrder,
memberId=t.sm.m.memberId
})托利斯先生()
})托利斯先生()
.选择(obj=>new SimpleConfCommSchedule
{
BillNumber=对象BillNumber,
位置=obj.room,
MeetingStart=obj.datetime,
MemberIds=obj.members.Select(m=>newsimplememberid
{
MemberId=m.MemberId,
DisplayOrder=m.DisplayOrder
})托利斯先生()
}).ToList();
返回COMMSCHED;
}
}
当我访问GroupBy时,我看到一个错误,该错误表示我无法从源类型System.Collections.Generic.List转换为System.Linq.IQueryable
我需要在代码中做什么更改才能使其正常工作?错误是不言自明的。您有一个变量
confCommSched
,该变量的类型不同于您在上一次赋值时尝试分配给它的结果(您使用的是GroupBy
)。解决方法很简单,直接返回查询结果或使用新变量
var result = confCommSched.GroupBy(/* everything else unchanged in your query and lambda calls etc */ );
return result;
非常感谢你的回答。因此,当我使用GroupBy时,我基本上是在改变返回的数据类型?@travislovellete-这是因为
ToList()
返回类型List
,而该类型不可分配给IQueryable
。非常感谢您的澄清和帮助,我非常感谢。