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

gen*_*ene 1 c# linq linq-to-objects

我有一个定义如下的类:

public class MyClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个逻辑,我可以在其中构建该类的列表:

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

现在,我需要根据“名称”获取“ID”。

我正在尝试以下操作:

int id01 = MyList.Where(x => x.FileName.Equals("File01")).Single(x => x.FileID)
Run Code Online (Sandbox Code Playgroud)

这样做我收到一条错误消息:

无法将类型“int”隐式转换为“bool”

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

Gil*_*een 5

Single方法的方法是:

public static TSource Single<TSource>(
  this IEnumerable<TSource> source,
  Func<TSource,?bool> predicate
)
Run Code Online (Sandbox Code Playgroud)

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

您正在寻找的是:

int id01 = MyList.Single(x => x.FileName.Equals("File01")).FileID;
Run Code Online (Sandbox Code Playgroud)

或者更好地使用SingleOrDefault

int id01 = MyList.SingleOrDefault(x => x.FileName.Equals("File01"))?.FileID;
Run Code Online (Sandbox Code Playgroud)

也看到,如果你想要的SingleOrDefaultFirstOrDefault