2016-07-26 144 views
-1

该表达式是否正确构建?Linq枚举没有结果

var avTimes = db.AvailableTimes.Where(m => m.TimeOfAppointment >= new DateTime(date.Year, date.Month, date.Day, 08, 00, 00) 
               && m.TimeOfAppointment <= new DateTime(date.Year, date.Month, date.Day, 16, 00, 00) 
               && m.StateOfBooking == 1 
               && m.ProviderId == id); 

它给出“linq枚举不产生任何结果”作为输出。

+1

如果db是数据库上下文,那么看起来好像你只有IQurable查询,为了向数据库提出实际的请求,你应该使用ToList(),ToDictionary()e.t.c.方法 – Vladimir

+4

如果它不产生任何结果,那意味着'AvailableTimes'中没有与您提供谓词匹配的实体。你真的可以验证上述集合中有一个实体能够通过所有这些检查吗? – Falgantil

+1

如果将鼠标悬停avTimes,您可以获取查询生成的SQL。这样你可以检查数据库中是否有任何项目。 – smoksnes

回答

1

枚举不产生结果是运行时告诉你,你的查询没有找到你的参数的任何匹配结果。有两种调试方法:

1)启动SQL事件探查器并开始跟踪,检查查看获取生成并运行查询分析器来更好地理解您的查询。

2)将您的查询修剪回无参数,确保它产生结果,然后每次添加每个参数/细化,观察者如何改变行为以更好地理解它。

-1

该表达式是否正确构建?

我会将DateTime值的实例移出linq语句。将方法移入linq语句可能会导致出现如下异常:这不能转换为sql语句

DateTime dtTimeOfAppointmentFrom = new DateTime(date.Year, date.Month, date.Day, 08, 00, 00); 
DateTime dtTimeOfAppointmentTo = new DateTime(date.Year, date.Month, date.Day, 16, 00, 00); 

var avTimes = db.AvailableTimes.Where(m => m.TimeOfAppointment >= dtTimeOfAppointmentFrom 
            && m.TimeOfAppointment <= dtTimeOfAppointmentTo 
            && m.StateOfBooking == 1 
            && m.ProviderId == id); 

LINQ枚举没有产生任何结果只是说,没有行发现,MEED你的病情。所以你可以通过在sql浏览器中输入语句并比较结果来验证结果。