Entity framework 正在尝试返回最大日期

Entity framework 正在尝试返回最大日期,entity-framework,linq,Entity Framework,Linq,我试图获取“最大日期年”值,但得到的错误是“结果”视图:展开“结果”视图将枚举IEnumerable。我还有别的事要做吗 public int GetMeetingMaxYearBygroupId(int groupId) { using (var db = new NccnEcommerceEntities()) { var q = from md in db.MeetingDates

我试图获取“最大日期年”值,但得到的错误是“结果”视图:展开“结果”视图将枚举IEnumerable。我还有别的事要做吗

public int GetMeetingMaxYearBygroupId(int groupId)
        {
            using (var db = new NccnEcommerceEntities())
            {
                var q = from md in db.MeetingDates
                        join m in db.Meetings on md.MeetingId equals m.MeetingId
                        where (m.GroupId == groupId)
                        group md by md.StartDate into g
                        select new { Date = g.Max(t => t.StartDate) };

                int year = 2001;
                return year;

            }

        }

Results视图:展开Results视图将枚举IEnumerable
不是错误,它只是Visual Studio说明展开Results视图时会发生什么


据我所知,您需要在选择后首先执行
,将结果放入内存,否则每当您引用
q
时,它将再次运行查询。

您可能会在调试器中看到此消息。这不是一个问题,或者更确切地说:如果你扩展,它可能是一个问题,但通常不是

可延迟执行 使用LINQ时,您必须知道有两组LINQ函数。不执行查询的,以及将获取数据并开始迭代的

第一组LINQ方法,即不执行查询的方法,可以通过返回
IQueryable
(或
IEnumerable
)来识别。人们常说这些方法使用延迟执行。在对这些方法的描述中,您将始终看到它们使用延迟执行。这些LINQ方法的串联并不表示数据本身,它表示获取数据的可能性

连接这些LINQ方法并不是一个昂贵的操作。连接iQueryTables只会更改iQueryTable的表达式。未联系数据库,尚未获取任何数据

另一组方法,即不返回
IQueryable
的方法将执行查询。这些LINQ函数通常在内部使用
foreach
,或者如果它更有效,if将使用
GetEnumerator()
获取枚举数,并重复调用
MoveNext()和Current
访问数据

GetEnumerator()
IQueryable.Expression
发送给
IQueryable.Provider
,后者将其转换为SQL并联系数据库获取数据。获取的数据作为
IEnumerator
返回给调用者,因此调用者可以调用
MoveNext()/Current
来访问数据

回到你的问题上来 在调试器中,您有时希望看到IQueryable表示的数据。消息
展开结果视图将枚举IEnumerable
只是一个警告,如果展开结果以查看数据,将联系数据库并获取数据

除此之外,这可能需要一些时间,一些查询可能会更改其他数据,例如,如果您在查询数据时登录到某个位置


因此,查看数据通常不是问题,特别是在调试非生产数据期间。请注意,如果展开数据,可能会有副作用。

听起来像是在“调试”视图中单击结果。这只是告诉你上面写的表达式还没有执行。上面的表达式是一个IQueryable,尚未计算。您的代码有一些错误-您正在按
md.StartDate
分组,这意味着每个组
g
将具有相同的
StartDate
,那么您为什么要使用
Max()
分组的目的是什么?您能更好地解释一下您实际想要的“最大日期年值”是什么吗?它是单个值吗?这是一个值列表吗?我只是想得到一个值的最大开始日期值