2011-10-25 46 views
1

我意识到由于某些奇怪的原因,你不能链接.Select()之后的.Where(),所以我想出了这个。如何在基于代码变量的LINQ中执行条件语句?

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(); 

,但现在我在。选择

"Cannot implicitly convert type 'System.Linq.IQueryable<short>' to 'System.Linq.IQueryable<IT_Portal.EventCalendar>'. An explicit conversion exists (are you missing a cast?)" 

获取和错误我在做什么错?简而言之,我只是希望能够从日历事件表中获取不同的环境ID,以便在特定环境中当天发生事件时通知用户。最后,如果用户未登录,则仅从标记为要显示给客户端的事件(ClientFlag)中获取环境ID。

回答

1

您需要一个新变量。

var environmentIDs = eventCalendar.Select(q => q.EnvironmentId).Distinct(); 
+1

<*插入神圣声音这里*>谢谢! –

0

通过选择选择(Q => q.EnvironmentId)你实际上是选择EnvironmentId而不是eventCalenderObject。

2

您的最后一行是问题所在。您试图重新使用与您分配的类型不同的局部变量。你只需要稍微改变:

var eventCalendarEnvironmentIds = 
    eventCalendar.Select(q => q.EnvironmentId).Distinct(); 
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。

相关问题