Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从LINQuery中获取单个元素?_C#_Linq - Fatal编程技术网

C# 从LINQuery中获取单个元素?

C# 从LINQuery中获取单个元素?,c#,linq,C#,Linq,因此,我对使用LINQ还不熟悉,它似乎非常有用,但我在从查询中获取值时遇到了一些困难 这是我的原始代码,可以工作,但我想用LINQ替换: foreach (LocationModel loc in locationList) { if (loc.Name.Equals(location, StringComparison.CurrentCultureIgnoreCase)) { locationId = loc.Id; break; } }

因此,我对使用LINQ还不熟悉,它似乎非常有用,但我在从查询中获取值时遇到了一些困难

这是我的原始代码,可以工作,但我想用LINQ替换:

foreach (LocationModel loc in locationList)
{
    if (loc.Name.Equals(location, StringComparison.CurrentCultureIgnoreCase))
    {
        locationId = loc.Id;
        break;
    }
}
这是我为做同样的事情而写的LINQ:

var matchQuery = from loc in locationList
                 where loc.Name.ToLowerInvariant() == location.ToLowerInvariant()
                 select loc.Id;

现在,如何从matchQuery实际获取int Id?

如果只需要第一项,请使用
FirstOrDefault

 var id = (from loc in locationList
           where loc.Name.ToLowerInvariant() == location.ToLowerInvariant()
           select loc.Id).FirstOrDefault();
或在方法语法中:

var id = locationList.FirstOrDefault(loc => loc.Name.ToLowerInvariant() == location.ToLowerInvariant())?.Id;

令人惊叹的!你喜欢哪种方法?或者它们实际上是一样的?@knuffemuff-你可以检查它们的性能,因为它们应该操作相同。我选择第二个,因为在这个特定的例子中,如果你只需要一条记录,那么它更容易阅读,你也可以使用SingleOrDefault()而不是FirstOrDefault(),好吧,在这里我认为LINQ更容易阅读。但我明白了,代码越少越好。:)@KNUFFEMUFE-两者都是linq-一个是查询语法,另一个是至少一个元素的方法语法,对于0或n,对于1个结果,最后是0或1