Linq FirstOrDefault返回多个

时间:2014-09-18 23:04:54

标签: c# linq

我遇到一个奇怪的问题,即linq语句返回多个实体,即使它有.FirstOrDefault()

var endlog = from e in endLogs
             where e.user_id == log.user_id && e.end_time <= log.start_time
             group e by e.end_time into g
             select g.OrderByDescending(x => x.end_time).FirstOrDefault();

user_state_log eLog = endlog.SingleOrDefault();

这样做是选择最近结束时间与提供的log相比较的日志。 我在user_state_log eLog = endlog.SingleOrDefault()上得到一个例外,说明变量中有多个实体。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您确定要使用group e by代替orderby吗?分组有可能包含多个实体。

答案 1 :(得分:1)

您的FirstOrDefault正在应用select的结果,该结果针对每个组(g)发生一次。我相信结果是endlog中的每个值都是单个项而不是组。

您可能打算将FirstOrDefault应用于查询而不是投影(select):

var endlog = (from e in endLogs
             where e.user_id == log.user_id && e.end_time <= log.start_time
             group e by e.end_time into g
             select g.OrderByDescending(x => x.end_time)).FirstOrDefault();