我意识到由于一些奇怪的原因你不能在.Select()之后链接.Where(),所以我想出了这个。
var eventCalendar = db.EventCalendars.Where(q => q.Date == e.Day.Date);
if (!isLogged)
{
eventCalendar = eventCalendar.Where(q => q.ClientFlag == true);
}
eventCalendar = eventCalendar.Select(q => q.EnvironmentId).Distinct();
但是现在我得到了.Select
的错误"Cannot implicitly convert type 'System.Linq.IQueryable<short>' to 'System.Linq.IQueryable<IT_Portal.EventCalendar>'. An explicit conversion exists (are you missing a cast?)"
我做错了什么?简单地说,我只想从Calendar事件表中获取Distinct Environment ID,这样我就可以在特定环境当天发生事件时通知用户。最后,如果用户未登录,则仅从标记为客户端显示的事件中获取环境ID(ClientFlag)。
答案 0 :(得分:2)
你的最后一行是问题所在。您正在尝试重新使用与您分配的类型不同的局部变量。你只需稍微改变一下:
var eventCalendarEnvironmentIds =
eventCalendar.Select(q => q.EnvironmentId).Distinct();
答案 1 :(得分:1)
您需要一个新变量。
var environmentIDs = eventCalendar.Select(q => q.EnvironmentId).Distinct();
答案 2 :(得分:0)
通过选择Select(q =&gt; q.EnvironmentId),您实际上是在选择EnvironmentId而不是eventCalenderObject。
答案 3 :(得分:0)
尝试更改:
var eventCalendar = db.EventCalendars.Where(q => q.Date == e.Day.Date);
为:
// I specify IQueryable, you can use 'var' - you simply need to change the variable name
IQueryable eventQuery = db.EventCalendars.Where(q => q.Date == e.Day.Date);
然后,选择:
var eventCalendar = eventQuery.Select(q => q.EnvironmentId).Distinct();
有时,当您继续使用var
时,您可能会忽略数据类型。您应该尽可能多地使用实际数据类型。陷入使用var的陷阱并不是一个好习惯,IMO。