LINQ查询嵌套类

时间:2014-11-05 20:55:34

标签: c# linq

作为C#和LINQ的新手,我对我正在尝试的特定查询的实现感到困惑。我有一个名为Session的特定类的数组。这个类的一个属性是ActiveConnection的数组,另一个类。每个ActiveConnection都包含ProcessType的枚举。

以下是目标:我需要确定来自所述数组的Session个对象包含ActiveConnectionProccessType.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查询。任何帮助将不胜感激。

3 个答案:

答案 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