只查询C#ObjectQuery中的第一个元素,如SQL中的LIMIT = 1

时间:2016-11-03 16:00:22

标签: c# linq

这(编辑:我在scope.Connect();和{catch ...)

之间粘贴整个代码
var Query = new SelectQuery("SELECT LogonId  FROM Win32_LogonSession Where LogonType=2");
var Searcher = new ManagementObjectSearcher(scope, Query);
var regName = new Regex(@"(?<=Name="").*(?="")");

 foreach (ManagementObject WmiObject in Searcher.Get())
{
foreach (ManagementObject LWmiObject in WmiObject.GetRelationships("Win32_LoggedOnUser"))
{
users.Add(regName.Match(LWmiObject["Antecedent"].ToString()).Value);
}
}

正在查询已登录的用户,但是我想快速使用它,并且由于服务器设置我无法改变,有时我会获得更多用户,例如更新服务或安全服务用户。他们看起来像#34;正常&#34;用户因此,据我所知,不可能过滤它们。

所以目标是选择第一条记录。我怎样才能做到这一点?我正在考虑SQL中的LIM#或TOP的C#版本。

谢谢

2 个答案:

答案 0 :(得分:1)

如果我了解您正在尝试做的事情,您可以像这样获得第一个登录用户。

ManagementObject LWmiObject = WmiObject.GetRelationships("Win32_LoggedOnUser").First();

答案 1 :(得分:0)

我不明白你在寻找什么,但我认为这解决了这个问题。

var users = Searcher.Get().Cast<ManagementObject>()
            .Select(wmi => wmi.GetRelationships("Win32_LoggedOnUser")
                .Cast<ManagementObject>()
                .Select(lWmi => regName.Match(lWmi["Antecedent"].ToString()))
                .Where(m => m.Success)
                .Select(u => u.Value)
                .FirstOrDefault());