Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6无法将Generic.List转换为Linq.IQueryable_C#_Linq_Generics_Entity Framework 6 - Fatal编程技术网

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
。非常感谢您的澄清和帮助,我非常感谢。