相当于使用LINQ在IEnumerable中搜索

时间:2013-12-02 04:26:30

标签: c# linq

使用LINQ编写以下内容是否有更简洁,更优雅的方式?

 var actorName = string.Empty;
 foreach (var myProperty in myProperties)
 {
       if (myProperty .PropertyName == "ActorName")
       {
             actorName = myProperty .PropertyValue;
             break;

       }

  }

3 个答案:

答案 0 :(得分:5)

var actorName = myProperties
                .FirstOrDefault(x => x.PropertyName == "ActorName")
                .PropertyValue;

如果找不到任何内容,则会给出NPE(FirstOrDefault默认返回null)。

要解决此问题,请改为使用两个语句:

var actor = myProperties
                .FirstOrDefault(x => x.PropertyName == "ActorName");

var actorName = actor == null ? string.Empty : actor.PropertyValue; 

答案 1 :(得分:2)

除了Jeroen的答案之外......首先检查null更安全..因为FirstOrDefault在没有任何内容匹配时返回null

var actor = myProperties
            .FirstOrDefault(x => x.PropertyName == "ActorName");

if (actor != null)
    actorName = actor.PropertyValue;

答案 2 :(得分:-1)

纯粹的LINQ版本,虽然我更喜欢Simon的回答。

var actorName = myProperties
    .Where(x => x.PropertyName == "ActorName")
    .Select(x => x.PropertyValue)
    .Concat(new[]{ string.Empty })
    .First();