使用Linq进行对象,如何在同一列表中根据另一个字段获取一个字段的值

时间:2017-11-07 19:25:28

标签: c# linq linq-to-objects

我有一个定义如下的类:

public class MyClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}

然后我有一个逻辑,我建立了该类的列表:

MyList = new List<MyClass>;
foreach(MyClassData myClass in Service.MyClassList)
{
    MyList.Add(new MyClass{ID = myClass.ID, Name = myClass.Name});
}

现在,我需要获得一个&#39; ID&#39;基于&#39;名称&#39;。

我正在尝试以下方法:

int id01 = MyList.Where(x => x.FileName.Equals("File01")).Single(x => x.FileID)

这样做我收到了错误消息:

  

无法隐式转换类型&#39; int&#39;到了布尔&#39;

我如何使用LINQ做到这一点?

1 个答案:

答案 0 :(得分:3)

Single方法是:

public static TSource Single<TSource>(
  this IEnumerable<TSource> source,
  Func<TSource, bool> predicate
)

它得到一个应该返回布尔值的谓词,但是你返回一个整数。它用于过滤而不是投影。

您正在寻找的是:

int id01 = MyList.Single(x => x.FileName.Equals("File01")).FileID;

或者更好地使用SingleOrDefault

int id01 = MyList.SingleOrDefault(x => x.FileName.Equals("File01"))?.FileID;

同时查看您是否需要SingleOrDefaultFirstOrDefault