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