如何在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。

如何在LINQ中基于代码变量做条件语句

您的最后一行是问题所在。你试图重用一个不同于你赋值给它的类型的局部变量。你只需要稍微改变一下:

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的陷阱并不是一个好的做法。