如何在LINQ中基于代码变量做条件语句
本文关键字:代码 变量 语句 条件 LINQ 于代码 | 更新日期: 2023-09-27 18:12:28
我意识到由于一些奇怪的原因,你不能在。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 Event表中获取Distinct Environment ID,以便在特定环境中当天发生事件时通知用户。最后,如果用户未登录,则仅从标记为为客户机(ClientFlag)显示的事件中获取环境Id。
您的最后一行是问题所在。你试图重用一个不同于你赋值给它的类型的局部变量。你只需要稍微改变一下:
var eventCalendarEnvironmentIds =
eventCalendar.Select(q => q.EnvironmentId).Distinct();
你需要一个新的变量。
var environmentIDs = eventCalendar.Select(q => q.EnvironmentId).Distinct();
通过选择Select(q => q.EnvironmentId),您实际上选择了EnvironmentId而不是eventCalenderObject。
尝试更改:
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的陷阱并不是一个好的做法。