作为C#和LINQ的新手,我对我正在尝试的特定查询的实现感到困惑。我有一个名为Session
的特定类的数组。这个类的一个属性是ActiveConnection
的数组,另一个类。每个ActiveConnection
都包含ProcessType
的枚举。
以下是目标:我需要确定来自所述数组的Session
个对象包含ActiveConnection
和ProccessType.Guest
。经过大量的摆弄,我已经得到了下面的代码(甚至不再编译)。
// Creating my array Session[]
var sessions = GetSessions();
var busySessions = from sessions
where sessions.ActiveConnections.ProcessType != ProcessType.Guest
select sessions;
// Do other stuff with this array of busy sessions
显然,我不明白如何实现LINQ查询。任何帮助将不胜感激。
答案 0 :(得分:4)
您需要一个嵌套查询(因为ActiveConnections
是一个集合):
var result = sessions.Where(session => session.ActiveConnections.Any(conn => conn.ProcessType == ProcessType.Guest));
这将返回Guest
列表中ActiveConnections
所在的所有会话(这是您所说的)。要做你的代码所做的事,你需要:
var result = sessions.Where(session => session.ActiveConnections.All(conn => conn.ProcessType != ProcessType.Guest));
答案 1 :(得分:1)
你可以这样做:
var busySessions = sessions.ToList().Where(s => s.ActiveConnections.Any(ac => ac.ProcessType != ProcessType.Guest)).Select();
OR
var busySessions = (from s in sessions
where s.ActiveConnections.Any(ac => ac.ProcessType != ProcessType.Guest)
select sessions).ToList();
答案 2 :(得分:1)
您需要在from
子句中声明一个变量,以表示源中的每个项目:
from session in GetSessions()
然后,在整组活动连接上执行子查询:
where session
.ActiveConnections
.Any(connection => connection.ProcessType != ProcessType.Guest)
最后,您选择符合条件的会话:
select session
完整查询:
from session in GetSessions()
where session
.ActiveConnections
.Any(connection => connection.ProcessType != ProcessType.Guest)
select session